반응형
정규표현식에서 사용되는 기호를 Meta문자라고 표현한다.
표현식 | 의미 |
^x | 문자열의 시작 표현. x문자로 시작됨 |
x$ | 문자열의 종료 표현. x문자로 종료됨 |
.x | 임의의 한 문자의 자리수를 표현. 문자열이 x로 끝남 |
x+ | 반복 표현. x문자가 한 번 이상 반복됨 |
x? | 존재 여부 표현. x문자가 존재할 수도, 존재하지 않을 수도 있음을 의미 |
x* | 반복 여부 표현. x 문자가 0번 또는 그 이상 반복됨을 의미 |
x|y | or 표현. x 또는 y문자가 존재함 |
(x) | 그룹 표현. x를 그룹으로 처리함 |
(x)(y) | 그룹들의 집합을 표현. 앞에서부터 순서대로 번호를 부여하여 관리하고, x, y는 각 그룹의 데이터로 관리 |
(x)(?:y) | 그룹들의 집합에 대한 예외 표현. 그룹 집합을으로 관리되지 않음을 의미 |
x{n} | 반복 표현. x문자가 n번 반복됨 |
x{n,} | 반복 표현. x문자가 n번 이상 반복됨 |
x{n,m} | 반복 표현. x문자가 최소 n번 이상, 최대 m번 이하로 반복됨 |
'[]'는 내부에 지정된 문자열의 범위 중에서 한 문자 만을 선택한다는 특수한 의미를 가진다. 그리고 내부에서 Meta문자를 사용하면 다른 의미를 가지고 동작할 수 있으므로, 잘 확인하고 사용해야 한다. 좀 더 특별한 용도로 사용되는 것들은 아래의 표와 같다.
표현식 | 의미 |
[xy] | 문자 선택을 표현. x와 y중에 하나를 의미 |
[^xy] | not을 표현하며, x와 y를 제외한 문자를 의미 |
[x-z] | range를 표현하며 x~z 사이의 문자를 의미 |
\^ | escape를 표현. ^를 문자로 사용함을 의미 |
\b | word boundary를 표현. 문자와 공백 사이의 문자를 의미 |
\B | non word boundary를 표현. 문자와 공백 사이가 아닌 문자를 의미 |
\d | digit를 표현하며 숫자를 의미 |
\D | non digit를 표현하며, 숫자가 아닌 것을 의미 |
\s | space를 표현하며 공백 문자를 의미 |
\S | non space를 표현하며, 공백문자가 아닌 것을 의미 |
\t | tab을 표현하며 탭 문자를 의미 |
\v | vertical tab을 표현하며 수직 탭 문자를 의미 |
\w | word를 표현하며 알파벳 + 숫자 + _ 중의 한 문자 임을 의미 |
\W |
non word를 표현하며 알파벡 + 숫자 + _가 아닌 문자를 의미 |
정규표현식을 사용할 때, Flag라는 것이 존재하는데 Flag를 사용하지 않으면 문자열에 대해서 검색을 한 번만 처리하고 종료하게 된다. Flag는 다음과 같은 것들이 존재한다.
Flag | 의미 |
g | global을 표현. 대상 문자열 내에 모든 패턴들을 검색하는 것을 의미 |
i | ignore case를 표현하며 대상 문자열에 대해서 대/소문자를 식별하지 않는 것을 의미 |
m | Multi line을 표현하며 대상 문자열이 다중 라인의 문자열인 경우에도 검색하는 것을 의미 |
사용 예제
개별 숫자 - / [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])*@[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-zA-Z 알파벳 중 하나의 문자가 없거나 연달아 나올 수 있으며 반드시 .이 존재하고, [a-zA-Z]의 문자가 2개나 3개가 존재
이 모든 것은 대소문자 구분 안함
전화번호 - /^\d{3}-\d{3,4}-\d{4}$/
시작을 숫자 3개로하며
중간에 하이픈 - 하나 존재
숫자가 3~4개 존재하며
하이픈 하나 존재
숫자 4개로 끝남
핸드폰 번호 - /^01([0|1|6|7|8|9]?)-?([0-9]{3,4})-?([0-9]{4})$/
시작을 숫자 01로 시작하며 그 후에 0,1,6,7,8,9 중에 하나가 나올수도 있으며
하이픈 - 하나 존재할수도 있으며
숫자 3~4개 이어지고
또 하이픈 - 하나 존재할수도 있으며
숫자 4개가 이어짐
URL - ^(https?):\/\/([^:\/\s]+)(:([^\/]*))?((\/[^\s/\/]+)*)?\/?([^#\s\?]*)(\?([^#\s]*))?(#(\w*))?$
^(https?):\/\/
([^:\/\s]+)
(:([^\/]*))
((\/[^\s/\/]+)*)?\/?([^#\s\?]*)(\?([^#\s]*))?(#(\w*))?$
반응형