Today I Learned
프로그래밍에서 문자열을 다룰 때, 문자열의 일정한 패턴을 표현하는 일종의 형식 언어
^ : 문자열의 시작을 표현.
ex) ^http : 문자열이 'http'로 시작하는 경우에만 매칭.
대괄호 안에서 쓰이는 경우 -> ^ 뒤에 오는 문자열 패턴과 일치하지 않는 것을 매칭.
ex) ab[^0-9] : 'ab' 뒤에 숫자가 아닌 것이 오는 것만 매칭.
(abc -> 매칭O / ab1 -> 매칭X)
$ : 문자열의 끝을 표현.
ex) tem$ : 문자열이 'tem'으로 끝난 경우에만 매칭
('item' -> 매칭O / 'contemporary' -> 매칭X)
\b : 문자와 공백 사이를 표현.
문자열의 시작, 끝, 개행, 탭, 콤마(','), 구두점('.'), 대시('-') 등
ex) \bplay\b : 단어 경계로 구분되는 'play'에는 매칭.
('I play the game on the playground' 에서 'play'를 매칭
'playground' 는 매칭X)
\B : \b 가 아닌것.
ex) play\B : 'play' 뒤에 단어의 경계가 아닌 것이 올때, 즉 문자열의 연속이 되는 패턴만 매칭.
('I play the game on the playground' 에서 'playground' 를 매칭O, 'play'는 매칭X
이때 'playground'를 매칭한다고 해서 'playground' 전체를 의미하는 것이 아닌, 'playground' 안의 'play' 만을 찾아낸다.)
\s : 모든 White-space (공백) 문자에 매칭. [\t\n\r\f\v] 와 동일한 의미.
\S : White-space (공백) 문자를 제외한 모든 문자에 매칭.
\d : 모든 숫자를 매칭. [0-9] 와 동일한 의미.
\D : 숫자가 아닌 모든 문자를 매칭. [^0-9] 와 동일한 의미.
\w : 단어를 만들 수 있는 문자를 매칭. 알파벳 대소문자, 숫자, 언더스코어를 포함. [A-Za-z0-9_] 와 동일한 의미.
\W : \w에 포함되지 않는 모든 문자를 매칭.
\n : LF(Line Feed)를 의미. 즉, 엔터(개행문자)를 의미.
\r 은 CR(Carriage Return)을 의미하는데, UNIX 에서 엔터의 의미를 LF 하나만 쓰는 것으로 보고, Windows에서는 CRLF를 함께 쓰는 것이 엔터를 의미한다. 현대에 와서는 에디터가 알아서 둘다 같이 엔터로 해석시켜 주므로, 엔터를 표현하려고 한다면 그냥 \n 만 사용해도 무방하다.
\ : 이스케이프용 문자. 정규식 상의 특별한 의미를 가지는 문자들을 해당 문자 그대로 사용하고자 할 때 사용하는 문자이다.
ex) \^ : '^' 문자 그대로를 의미.
. : 모든 문자 1개를 매칭. 이때 공백 한칸도 문자 1개로 취급됨.
동일한 글자 혹은 그룹이 n개 만큼 나오는 경우 사용
"?" : 바로 앞의 글자 혹은 그룹이 1개 혹은 0개 임을 의미.
ex) apples? : ? 바로 앞의 글자인 's'가 있을 수도 있고, 없을 수도 있으므로, 'apple', 'apples' 에 매칭.
"" : 0개 이상을 의미.
ex) n\d : 'n' 뒤에 숫자가 0개 이상이라는 의미. 'n', 'n1', 'n123' 등에 모두 매칭.
"+" : 1개 이상을 의미.
ex) n\d+ : 'n' 뒤에 숫자가 1개 이상이라는 의미. 'n1', 'n123' 등에 모두 매칭되나, 'n' 에는 매칭되지 않음.
"{n}" : n 개가 있다는 것을 의미.
ex) n\d{2} : 'n' 뒤 숫자가 2개 오는 패턴을 의미. 'n12' 에는 매칭되나, 'n', 'n1', 'n123' 에는 매칭되지 않음.
'n123' 이라는 문자열에서는 'n12' 까지만 매칭하고, 3은 제외시키게 됨.
"{n, m}" : n개 이상, m개 이하를 의미. 이때 m을 생략하여 {n, } 와 같이 쓸 수 있는데, 이는 n개 이상 만을 의미.
ex 1) n\d{2, 3} : 'n12', 'n123' 에는 매칭되지만, 'n1'이나 'n1234'에는 매칭되지 않음.
개별 숫자 : /[0-9]/g
전체에서 0~9사이에 아무 숫자 '하나' 찾음
개발 문자 - /[to]/g
전체에서 t 혹은 o 를 모두 찾음
단어 : /filter/g
전체에서 f 따로 i 따로 찾는게 아니라 'filter' 라는 단어에 매칭되는것을 찾음
단어 제외 : /\b(?:(?!to)\w)+\b/g
전체에서 'to' 라는 단어를 빼고 다른 단어 매칭 / 확인결과 "Tutorial" 도 제외됨.
단어 제외 : \b(?!\bto\b)\w+\b
전체에서 'to' 라는 단어를 빼고 다른 단어 매칭 / 확인결과 "Tutorial" 는 제외 안됨. 이게 더 정확하다고 볼수있을듯.
이메일 : /^0-9a-zA-Z@0-9a-zA-Z.[a-zA-Z]{2,3}$/i
'시작을' 0~9 사이 숫자 or a-z A-Z 알바펫 아무거나로 시작하고 / 중간에 - . 같은 문자가 있을수도 있고 없을수도 있으며 /
그 후에 0~9 사이 숫자 or a-z A-Z 알바펫중 하나의 문자가 없거나 연달아 나올수 있으며 / @ 가 반드시 존재하고 /
0-9a-zA-Z 여기서 하나가 있고 / 중간에 - . 같은 문자가 있을수도 있고 없을수도 있으며 / 그 후에 0~9 사이 숫자 or a-z A-Z 알바펫중 하나의
문자가 없거나 연달아 나올수 있으며 / 반드시 . 이 존재하고 / [a-zA-Z] 의 문자가 2개나 3개가 존재 / 이 모든것은 대소문자 구분안함
출처: https://hamait.tistory.com/342 [HAMA 블로그:티스토리]