개발/Java

정규표현식

펭귀니 :) 2020. 8. 18. 11:26

 

메타 문자 설명
| 표현식 논리 OR gr(a|e)y -> "gray" "grey"
^ 입력의 시작부분에 대응된다.  /^A/는 "An E"의 A와 대응된다.
$ 입력이 끝 부분과 대응된다. /t$/는 "eat"와 대응된다.
* ( = {0,}) 앞의 표현식이 0회 이상 연속으로 반복되는 부분과 대응된다. /bo*/ -> "boooed", "A bird warbled" X-> "A goat grunted"
ab*c -> "ac" "abc" "abbc" "abbbc"
+( = {1,}) 앞의 표현식이 1회 이상 연속으로 반복되는 부분에 대응된다. /a+/ -> "candy", "caaaandy" X->"cndy"
ab+c -> "abc" "abbc" "abbbc" X-> "ac"
? ( = {0,1}) 앞의 표현식이 0 또는 1회 등장하는 부분과 대응된다. /e?le?/은 "angel", "angle", "oslo"에 대응.
colou?r -> "color" "colour"
. 개행 문자를 제외한 모든 단일 문자와 대응된다. /.n/ -> "nay, an apple is on the tree"의 'an'과 'on'에 대응. X-> 'nay'
{n}
정확히 n번만큼 일치시킨다.  

{min, }

min번 이상만큼 일치시킨다.  
{min, max}
적어도 min번만큼 일치시키고, max번을 초과하지 않는다.  
[ ] (= 문자 클래스)
[와 ]사이의 문자 중 하나를 선택. | 를 여러개 쓴 것과 같은 의미. [abc]d -> "ad" "bd" "cd"
- 와 함께 쓰면 범위 지정 가능
[a-z] = a부터 z까지 중 하나
[1-9] = 1부터 9까지 중 하나
[^ ] (= 부정)
해당 문자를 제외한 나머지 문자를 선택한다. [^abc]d -> "ed" "fd" X-> "ad" "bd"
[^a-z] = 알파벳 소문자로 시작하지 않는 모든 문자
(x) (= 하위식) /(foo) (bar) \1 \2/ 안의 '(foo)'와 '(bar)'는 문자열 "foo bar foo bar"에서 처음의 두 단어에 대응되고 이를 기억한다. \1과 \2는 문자열의 마지막 두 단어에 대응된다.  
(?:x) (= 비포획 괄호, 정규식 연산자가 같이 동작할 수 있게 하위 표현을 정의) 'x'에 대응되지만 대응된 것을 기억하지 않는다. 만약 정규식이 /foo{1,2}/이면 {1,2}는 'foo'의 마지막 'o'에만 적용된다. 그렇지만 비포획괄호인 /(?:foo){1,2}/라면 {1,2}는 단어 'foo' 전체에 적용된다.  
x(?=y) (=lookahead) 오직 'y'가 뒤따라오는 'x'에만 대응된다. /jack(?=Sprat)/ -> "Jack Sprat"
x(?!y) (= negated lookahead) 'x'뒤에 'y'가 없는 경우에만 'x'에 일치한다. /\d+(?!\.)/ = 소수점이 뒤따라오지 않는 숫자에 일치
     

 

메타 문자 설명
\A 문자열의 시작점과 대응된다. (내부 줄이 아니다) /\AH/ -> "Hello\nWorld\n"
[\b] 백스페이스에 대응. 대괄호 []를 반드시 이용  
\b 단어 경계에 대응된다.

/\bm/ -> "moon"의 m에 대응
/oo\b/ X-> "moon"의 oo에 대응X
/oon\b/ -> "moon"의 'oon'에 대응

\B 단어 경계가 아닌 부분에 대응.

/\B../ -> "noonday"의 'oo'에 대응
/y\B./ -> "possibly yesterday"의 'ye'에 대응

\d 숫자와 일치시킨다.

/(\d+)/ -> "99 bottles of beer on the wall"

\D 숫자가 아닌 항목을 일치시킨다.
(= [^0-9])

/\D/ -> "Hello World\n"

\f 폼피드 (U+000C) 문자에 대응

 

\n (= 일치하는 n번째 패턴) 일치하는 패턴들 중 n번째를 선택하며, 여기에서 n은 1에서 9 중 하나가 올 수 있다.  
\n 줄 바꿈(U+00A) 문자에 대응  
\r 캐리지 리턴 (U+000D) 문자에 대응  
\s 스페이스, 탭, 폼피드, 줄 바꿈 문자 등을 포함한 하나의 공백 문자에 대응된다.
(= [\f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\202f\u205f\u3000\ufeff])
/\s\w*/ -> "foo bar"의 ' bar'
\S 공백을 제외한 어떠한 것들과 대응된다. /\S\w*/ -> "foo bar"의 'foo'
\t 탭 (U+0009) 문자에 대응된다.  
\v 수직 탭 (U+000B) 문자에 대응된다.  
\w _를 포함한 영숫자와 대응된다.
(= [A-Za-z0-9_])
/\w/ -> "apple"의 'a'
/\w/ -> "$5.28"의 '5'
\W _를 제외하여 영숫자가 아닌 문자열들과 대응된다.
(= [^A-Za-z0-9_])
/\w/ -> "50%"의 '%'
\z 문자열이 끝과 일치시킨다. (내부 줄이 아니다) /d\n\z/ -> "Hello\nWorld\n"
\0 널 (U+0000) 문자에 대응.
주의! 다른 숫자 뒤에 쓸 경우 8진 이스케이프 시퀀스
 
\xhh 코드가 hh(두 16진 숫자)인 문자에 일치합니다.  
\uhhhh 코드가 hhhh(네개의 16진 숫자)인 문자에 일치합니다.  

 

Regular expression flags

Flag Description
g 전역 검색
i 대소문자 구분 없는 검색
m 다중행(multi-line) 검색
s . 에 개행 문자도 매칭 (ES2018)
u 유니코드; 패턴을 유니코드 포인트의 나열로 취급합니다.
y "sticky" 검색을 수행. 문자열의 현재 위치부터 검색을 수행

 

 

 


[ 출처 ]

https://ko.wikipedia.org/wiki/정규_표현식

https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/%EC%A0%95%EA%B7%9C%EC%8B%9D