본문 바로가기

기타

정규식 표현 특수문자

# 정규식 표현

Java로 String Parser를 구현하는 중에 특수문자를 치환해줘야하는 경우가 발생했다. 정규식에서 사용하는 정규 문자들을 치환(String.replaceAll 메소드 사용)해줘야 했었는데, 정규식에서는 특수문자를 정규식의 패턴으로 인식해서 에러(java.util.regex.PatternSyntaxException)가 발생하였다. 이러한 방법을 해결해주기 위해 치환할 때 아래와 같이 표현해주면 된다.
 
 
1.
[]으로 싸줘야하는 문자
 * → [*]
 + → [+]
 $ → [$]
 | → [|]
 
2.
\\ 추가 해야하는 문자
 ( → \\(
 ) → \\)
 { → \\{
 } → \\}
 ^ → \\^
 [ → \\[
 ] → \\]
 
3.무관한 특수 문자
 ! # % & @ ` : ; - . < > , ~ ' "

(1) ^ (caret)
라인의 처음이나 문자열의 처음을 표시

예 : ^aa (문자열의 처음에 aa를 포함하면 참, 그렇지 않으면 거짓)
(2) $ (dollar)
라인의 끝이나 문자열의 끝을 표시
예 : aaa$ (문자열의 끝에 aaa를 포함하면 참, 그렇지 않으면 거짓)
(3) . (period)
임의의 한 문자를 표시
예 : ^a.c (문자열의 처음에 abc, adc, aZc 등은 참, aa 는 거짓)
예 : a..b$ (문자열의 끝에 aaab, abbb, azzb 등을 포함하면 참)
(4) [] (bracket)
문자의 집합이나 범위를 나타냄, 두 문자 사이의 범위는 "-" 사용.
[]내에서 "^"이 선행되면 not을 나타냄
예 : [abc] (a, b, c 중 어떤 문자, "[a-c]."과 동일)
예 : [Yy] (Y 또는 y)
예 : [A-Za-z0-9] (모든 알파벳과 숫자)
예 : [-A-Z]. ("-"(hyphen)과 모든 대문자)
예 : [^a-z] (소문자 이외의 문자)
예 : [^0-9] (숫자 이외의 문자)
(5) {} (brace)
{} 내의 숫자는 직전의 선행문자가 나타나는 횟수,범위를 나타냄
예 : a{3} ('a'의 3번 반복인 aaa만 해당됨)
예 : a{3,} ('a'가 3번 이상 반복인 aaa, aaaa, ... 등을 나타냄)
예 : a{3,5} (aaa, aaaa, aaaaa 만 해당됨)
예 : ab{2,3} (abb와 abbb 만 해당됨)
예 : [0-9]{2} (두 자리 숫자)
예 : doc[7-9]{2} (doc77, doc87, doc97 등이 해당)
예 : [^Zz]{3} (Z와 z를 포함하지 않는 5개의 문자열, abc, ttt 등)
예 : .{3,4}er ('er'앞에 세 개 또는 네 개의 문자를 포함하는 문자열이므로 Peter, mother 등이 해당)
(6) * (asterisk)
"*" 직전의 선행문자가 0번 또는 여러번 나타나는 문자열
예 : ab*c ('b'를 0번 또는 여러번 포함하므로 ac, abc, abbbc 등)
예 : * (선행문자가 없는 경우이므로 임의의 문자열 및 공백 문자열)
예 : .* (선행문자가 "."이므로 하나이상의 문자를 포함하는 문자열)
예 : ab* ('b'를 0번 또는 여러번 포함하므로 a, accc, abb 등)
예 : a* ('a'를 0번 또는 여러번 포함하므로 k, kd, a, aa, abb 등)
예 : doc[7-9]* (doc7, doc777, doc778989, doc 등이 해당)
예 : [A-Z].* (대문자로만 이루어진 문자열)
예 : like.* (직전의 선행문자가 '.'이므로 like에 0 또는 하나 이상의 문자가 추가된 문자열이 됨, like, likely, liker, likelihood 등)
(7) + (Plus Sign)
"+" 직전의 선행문자가 1번 이상 나타나는 문자열
예 : ab+c ('b'를 1번 또는 여러번 포함하므로 abc, abcd, abbc 등)
예 : ab+ ('b'를 1번 또는 여러번 포함하므로 ab, abcc, abb 등)
예 : [A-Z]+ (대문자로만 이루어진 문자열)
예 : like.+ (직전의 선행문자가 '.'이므로 like에 하나 이상의 문자가 추가된 문자열이 됨, likely, liker, likelihood 등, 그러나 like는 해당안됨)
(8) ? (question mark)
"?" 직전의 선행문자가 0번 또는 1번 나타나는 문자열
예 : ab?c ('b'를 0번 또는 1번 포함하므로 abc, abcd 만 해당됨)
(9) () (parenthesis)
()는 정규식내에서 패턴을 그룹화 할 때 사용
(10) | (bar)
or를 나타냄
예 : a|b|c (a, b, c 중 하나, 즉 [a-c]와 동일함)
예 : yes|Yes (yes나 Yes 중 하나, [yY]es와 동일함)
예 : korea|japan|chinese (korea, japan, chinese 중 하나)
(11) \ (backslash)
위에서 사용된 특수 문자들을 정규식내에서 문자로 취급하고 싶을 때 '\'를 선행시켜서 사용하면됨
예 : filename\.ext ("filename.ext"를 나타냄)
예 : [\?\[\\\]] ('?', '[', '\', ']' 중 하나)

'기타' 카테고리의 다른 글

html base tag - domain  (0) 2014.08.01
중고차 고르기 달인편  (0) 2013.12.01
정규식표현 정리  (0) 2013.07.31
대체 URL 코드 - %26, %2F, %3A, %3F, %3D ( 16진수 )  (0) 2013.05.23
Commons Net의 FTPClient 사용하기  (0) 2013.03.27