정규표현식의 기본 문법
정규표현식은 소프트웨어에 따라서 방식이나 지원 범위가 다를 수 있습니다.
^The
|
The로 시작하는 문자열
|
of despair$
|
of despair로 끝나는 문자열
|
^abc$
|
abc로 시작하고 abc로 끝나는 문자열 (abc 라는 문자열도 해당됨)
|
notice
|
notice가 들어 있는 문자열
|
ab*
|
a 다음에 b가 0개
이상 (a, ab, abbb 등등)
|
ab+
|
a 다음에 b가 1개
이상 (ab, abbb 등등)
|
ab?
|
a 다음에 b가 있거나 없거나
(ab 또는 a)
|
ab{2}
|
a 다음에 b가 2개
있는 문자열 (abb)
|
ab{2,}
|
a 다음에 b가 2개
이상 (abb, abbbb 등등)
|
ab{3,5}
|
a 다음에 b가 3개에서 5개 사이 (abbb, abbbb, 또는 abbbbb)
|
*, +,
?는 각각 {0,}, {1,}, {0,1}과
같습니다
( )는 문자열을 묶음 처리할 때 사용
a(bc)*
|
a 다음에 bc가 0개
이상 (묶음 처리)
|
a(bc){1,5}
|
a 다음에 bc가 1개에서 5개 사이
|
hi|hello
|
hi나 hello가 들어 있는 문자열
|
(b|cd)ef
|
bef 또는 cdef
|
(a|b)*c
|
a와 b가 섞여서 여러번 나타나고 그뒤에 c가 붙어있는 패턴
|
. (점)
|
임의의 한 문자
|
^.{3}$
|
3문자로만 되어 있는 문자열
|
[ ]
|
괄호 안에 있는 내용 중 임의의 한
문자
|
[^ ]
|
첫문자로 ^를 쓰면 괄호 내용의 부정. 즉 괄호 안에 포함되지 않는 한
문자
|
[ab]
|
a 또는 b (a|b 와 동일한 표현)
|
[a-d]
|
소문자 a에서 d까지 (a|b|c|d 또는
[abcd] 와 동일)
|
^[a-zA-Z]
|
영문자로 시작하는 문자열
|
[0-9]%
|
% 문자 앞에 하나의 숫자가 붙어 있는 패턴
|
%[^a-zA-Z]%
|
두
% 문자 사이에 영문자가 없는 패턴
|
특수 문자 자체를 검색하기 및 사용하기
\^
|
^
|
\.
|
.
|
\[
|
[
|
\$
|
$
|
\(
|
(
|
\)
|
)
|
\|
|
|
|
\*
|
*
|
\+
|
+
|
\?
|
?
|
\{
|
{
|
\\
|
\
|
\n
|
줄넘김 문자
|
\r
|
리턴 문자
|
\w
|
알파벳과 _ (언더바)
|
\W
|
알파벳과 _ 가 아닌 것
|
\s
|
빈 공간(space)
|
\S
|
빈 공간이 아닌 것
|
\d
|
숫자
|
\D
|
숫자가 아닌 것
|
\b
|
단어와 단어 사이의 경계
|
\B
|
단어 사이의 경계가 아닌 것
|
\t
|
Tab 문자
|
\xnn
|
16진수 nn에 해당하는 문자
|
[ ] 안에서는 특수 문자가 모두 효력을 잃게 됩니다.
검색 + 치환을 위한 하부식(부분식)
( )로 둘러싼 부분은 각각 하나의 덩어리로 취급해서,
검색시 ( ) 안에
해당되는 내용들을 변경할 내용에서 그대로 가져다 이용할 수 있습니다.
검색된 각각의 ( )안에 해당되는 내용은 변경할 내용에서 $1, $2, .. 등으로 지정해서
쓸 수 있습니다.
예제) mp3파일 이름 바꾸기
검색 : (.*) - (.*)\.mp3 .*은 길이에 상관없이 임의의 문자열,
\.은 점
치환 : $2 - $1.mp3 앞에서 검색한 ( )안에 해당되는
내용끼리 순서 바꾸기
ex) "제목 - 연주자.mp3"
Þ "연주자 - 제목.mp3"
앞에서 정의한 하부식을 다시 활용하기 (제가 잘못 이해한 것일 수도 있는데)
\n은 ( ) 하부식
중에서 n번째 하부식을 가리킵니다.
예제) (.+)\1+
\1로 되어 있으니까 첫번째 부분식 (.+)를 가리킵니다. 위 내용을 해석하자면, 일단 (.+)가 있으니까 이에 해당되는 내용을 찾고, \1+이 있으니까 첫번째 부분식 (.+)와 똑같은 내용이 그 뒤에 1번 이상 있는 문자열을 찾습니다.
예제) abab같은 문자열이 위에 해당되는데, 일단 (.+) 즉 임의의 문자열 ab를 찾고 그 뒤에 \1+로 첫번째 부분식을 다시 1번 이상 있는 것을 찾으니까 뒤의 ab가 이에 해당합니다.
변경자 ? 검색 방식 변경
(?i)
|
대소문자 무시 (기본값)
|
(?-i)
|
대소문자 구분
|
(?g)
|
"greedy" 모드로 전환 (기본값)
|
(?-g)
|
"greedy" 모드 해제, 따라서 "+"는 "+?"과 동일한
것으로 인식
|