정규표현식 : 문자열의 패턴을 검사하는 표현식
- ^ : 뒷 문자로 시작 ex) ^a : a로 시작하는 문자열
- $ : 앞 문자로 종료
ex) $a : a로 끝나는 문자열
- . : 임의의 문자(줄바꿈 제외) 어떤 문자 상관없이 임의의 한 글자를의미함. 단, 줄바꿈은 제외한다.
- * : 앞 문자가 0개 이상 ex) a* : a가 하나도 없을 수 있고 여러개일 수 있음.
- + : 앞 문자가 1개 이상 ex) a+ : a가 하나 이상 옴
- ? : 앞 문자가 없거나 1개 ex) ?a : a가 없거나 한개가 온다.
- [ ] : 문자의 집합이나 범위 ex) [a-z] : a부터 z까지 ex) [^a-z] : a부터 z가 아닌 것 (^)기호를 씀으로써 부정 표시
- (?i) : 뒷 문자의 대소문자 구분 안함.
- \ : 정규표현식에서 사용되는 특수문자가 아니란 것을 표현
/*
* 정규표현식 : 문자열의패턴을 검사하는 표현식
*
* ^ 뒷 문자로 시작 => ^a : a로 시작하는 문자열
* $ 앞 문자로 종료 => $a : a로 끝나눈 문자열이다.
* . 임의의 문자(줄바꿈 제외) => 어떤 문자든지 상관없이 임의의 한글자를 의미함. 단, 줄바꿈을 제외함
* * 앞 문자가 0개 이상 => 앞에 있는 문자가 0개 이상이다. 즉 a* 라면 a가 하나도 없을수도 있고 여러개일 수 있다.
* + 앞 문자가 1개 이상 => +a : a 가 하나 이상 온다.
* ? 앞 문자가 없거나 1개 => ?a : a 가 없거나 한개가 온다.
*
* [] 문자의 집합이나 범위([a-z] : a부터 z까지, [^a-z]:a부터 z가 아닌것) => ^을 함으로써 부정표현임.
* {} 앞 문자의 개수({2}:2개, {2,4}:2개 이상 4개 이하) => a{2} : a문자가 2개다.
* () 그룹화(1개의 문자처럼 인식)
* | OR 연산
* \s 공백, 탭, 줄바꿈
* \S 공백, 탭,줄바꿈이 아닌 문자
* \w 알파벳이나 숫자
* \W 알파벳이나 숫자가아닌 문자
* \d 숫자
* \D 숫자가 아닌문자
* (?i) 뒷 문자의 대소문자 구분안함
* \ 정규표현식에서사용되는 특수문자 표현 => 정규형에 쓰는 특수문자 중 문자열로 들어올 때 사용
* */
public static void main (String[] args) {
String str = "abc123";
//정규표현식을 만들때에는 내가 원하는 형식만 타이트하게 만드는것이 좋다.
// String regex = "[a-z]{3}[0-9]{1,3}";//소문자 a부터 z 까지 3글자 온다. 0부터 9까지의 숫자가 1개 이상 3개 이하온다.
// String regex = "[a-z0-9]+";//a-z 0-9의 범위의 한문자(영문소문자, 숫자)가 1개 이상 온다.
String regex = "\\w*";//알파벳이나 숫자가 0개 이상 들어온다. 자바에서는 \를 두개 넣어야 인식을 한다.
Pattern p = Pattern.compile (regex);//정규 표현식을 파라미터로 넘겨줌. 정규표현식을 확인해서 패턴을 만들어줌
Matcher m = p.matcher (str);//str이 regex의 패턴과 동일한지 확인
System.out.println (m.matches()); //true
//아이디, 전화번호, 이메일 주소의 유효성을 검사하는 정규표현식을 만들어주세요
//아이디 기준 : 5~20 자의 영문 소문자, 숫자와 특수기호 (-), (_) 만 사용 가능하다
//[a-z_] : a부터 z까지 _ 포함
String regex1 = "[a-z0-9-_]{5,20}+";//아이디 : 통과
String regex2 = "(0\\d{1,2})-(\\d{3,4})-(\\d{4})";//전화번호 : 통과
//선생님 전화번호 정규식 : ^0\\d{1,3}-\\d{3,4}-\\d{4}
String regex3 = "([a-z0-9-_]{5,20})@([a-zA-Z]+)\\.([a-zA-Z]{2,3})";//내가쓴 이메일
//선생님 이메일 정규식 : [a-z0-9_-]{5,20}@[a-zA-Z]+\\.(?i)(com|net|org|([a-z]{2}\\.[a-z]{2}))
//.에 역슬러시 2개가 있는 이유는 정규표현식에서 .을 구분자로 사용하고 있기 때문에 특수문자 '.'이란것을 알려주기 위해 사용한것.
str = "o3k_93@ac.er";
p = Pattern.compile (regex3);//정규 표현식을 파라미터로 넘겨줌. 정규표현식을 확인해서 패턴을 만들어줌
m = p.matcher (str);//str이 regex의 패턴과 동일한지 확인
System.out.println ("str : " + m.matches());