[0-9]: 숫자 0~9까지
[a-zA-Z]: 알파벳 모두
[abc]: a,b,c가 들어간 문자만 매치
^ 문자는 반대(NOT)라는 의미
[^0-9]: 숫자가 아닌 문자만 매치
* 자주 사용하는 문자클래스
[0-9], [a-zA-Z] 등은 무척 자주 사용하는 정규표현식
1) \d : 숫자와 매치 (= [0-9])
2) \D : 숫자가 아닌 것만 매치 (= [^0-9])
3) \s : whitespace 문자와 매치 (= [(빈칸)\t\n\r\f\v])
4) \S : whitespace 문자가 아닌 것과 매치 (= [^(빈칸)\t\n\r\f\v])
5) \w : 문자+숫자와 매치 (= [a-zA-Z0-9_])
6) \W : 문자+숫자아닌 문자와 매치(= [^a-zA-Z0-9])
ex1) a.b => "a+모든문자+b"
즉, a와 b라는 문자 사이에 어떤 문자가 들어가도 모두 매치된다는 의미이다.
-> "aab": 매치, "abc": 매치안됨(a와 b사이 어던 문자라도 하나는 있어야함)
ex2) a[.]b => "a + Dot(.)문자 + b"
-> "a.b": 매치, "aab": 매치안됨
=> 여기선 모든문자라는 의미가 아니라 문자그대로 .(dot)이다.
ex) ca*t
-> *(별) 바로 앞에 있는 문자 a가 0부터 무한대로 반복될수 있다는 의미(사실 메모리 제한으로 2억개 정도만 가능)
-> ct: 매치(0번 반복), cat: 매치(1번 반복)
: +는 최소 1번 이상 반복될 때 사용
즉, *(별) 이 반복횟수 0부터라면 +는 1부터
ex) ca+t => "c+a(1번 이상 반복)+t"
-> ct: 매치 안됨, cat: 매치, caat: 매치
: {}메타문자(중괄호)를 사용하면 반복횟수를 고정할 수 있다.
{m,n}정규식을 사용하면 반복횟수가 m부터 n까지 매치할 수 있다.
또한, m 또는 n을 생략할 수도 있다.
ex1) {3,}: 3이상, {,3}: 3이하
생략된 m은 0과 같고 생략된 n은 무한대의 의미
ex2) ca{2}t : "c+a(반드시2번 반복)+t"
ex3) ca{2,5}t : "c+a(2~5회 반복)+t"
ex) ab?c : "a+b(있어도 되고 없어도된다.)+c"
=> * , +, ? 메타문자는 모두 {m,n} 형태로 고쳐쓰는 것이 가능하지만 가급적 간결한 *, +, ? 사용