기본 메타 문자
. | 모든 문자 일치 |
| | OR 왼쪽 문자(혹은 패턴) 혹은 오른쪽 문자(혹은 패턴)과 일치 |
[] | 문자 집합 구성원 중 하나와 일치 예) [abc] : a 혹은 b 혹은 c |
[^] | 문자 집합 구성원을 제외하고 일치, [^abc] : a,b,c 제외한 모든 문자 |
- | 범위 정의 ([A-Z]와 같은 형태로 대문자 A에서 Z사이의 문자를 의미) |
\ | 다음에 오는 문자를 이스케이프1 |
패턴 | 설명 |
---|---|
a, b, d, e, f 에 매칭. | |
c, d, e, f, g...., m에 매칭. | |
G, H, I, J에 매칭. | |
모든 대소문자 알파벳에 매칭. | |
5, 6, 7, 8에 매칭. | |
패턴 | 설명 |
---|---|
a, z, -와 매칭. ( – 는 문자사이에 있으면 범위를 나타내는 메타캐릭터가 되지만, 캐릭터 클래스의 최초에 위치하면 이스케이프하지 않아도 문자그대로의 하이픈으로 인식한다) | |
a, z, -와 매칭. (위와 달리 – 가 캐릭터 클래스의 중간에 위치했으므로 이스케이프 하지 않으면 범위를 나타내는 메타캐릭터로 인식해 버린다) | |
숫자 이외의 모든 문자와 매칭 | |
foobar, foober 등과 매칭하지만 foobbr, foobcr 등과는 매칭하지 않는다. | |
foobbr, foobcr 등과 매칭하지만, foobar, foober등과는 매칭하지 않는다. |
문자 | 집합 일치 |
[abcwxyz] | 7개의 문자 중 하나와 일치 |
[a-cw-z] | 위와 같음 |
[a-zA-Z] | 52개의 대소문자 알파벳 문자 중 하나와 일치 |
[\000-\177] | 모든 7비트 아스키 문자와 일치 |
패턴 | 일치하는 문자열 | 일치하지 않는 문자열 |
/bet.y/ | betty betsy bet=y bet.y | bety betsey |
/3\.14159/ | 3.14159 | 3014159 |
수량자
* | 앞의 문자나 부분식2이 0개 이상 탐욕적으로 찾기 |
*? | 탐욕적 수량자 *를 게으른(lazy) 수량자로 바꿔 찾기 |
+ | 앞의 문자나 부분식을 하나 이상 탐욕적으로 찾기 |
+? | 탐욕적 수량자 +를 게으른(lazy) 수량자로 바꿔 찾기 |
? | 앞의 문자나 부분식을 0개나 1개 찾기 |
{n} | 앞의 문자나 부분식이 정확히 n번 일치하는 경우 찾기 |
{m,n} | 앞의 문자나 부분식이 m번에서 n번 일치하는 경우 찾기 |
{n,} | 앞의 문자나 부분식이 n번 이상인 경우를 탐욕적으로 찾기 |
{n,}? | 탐욕적 수량자 {n,}를 게으른(lazy) 수량자로 바꿔 찾기 |
패턴 | 설명 | 계열 | 대체패턴 |
---|---|---|---|
0번 이상 반복 | {0,}과 동일 | ||
1번 이상 반복 | {1,}과 동일 | ||
0번 또는 1번 반복 | - | {0,1}과 동일 | |
n번 반복 | |||
최소한 n번 반복 | |||
n번 이상 m번 이하 반복 | |||
0번 이상 반복 | {0,}?과 동일 | ||
1번 이상 반복 | {1,}?과 동일 | ||
0번 또는 1번 반복 | {0,1}?과 동일 | ||
n번 반복 | |||
최소한 n번 반복 | |||
n번 이상 m번 이하 반복 |
패턴 | 설명 |
---|---|
foobar, foobalkjdflkj9r, foobr등과 매칭 | |
foobar, foobalkjdflkj9r 등과 매칭하지만 foobr과는 매칭안함 | |
foobar, foobbr, foobr 등과 매칭하지만 foobalkj9r 와는 매칭안함 | |
오직 foobaar 와만 매칭 (그러므로 사실 정규표현식을 사용하는 의미가 없음) | |
foobaar, foobaaar, foobaaaar 등과 매칭하지만 foobar와는 매칭안함 | |
foobaar, foobaaar두 경우와만 매칭하지만 기타foobaaaar, foobar등과는 매칭안함 |
패턴 | 일치하는 문자열 |
fred\t*barney/ | fred\tbarney fred\t\tbarney fred\t\t\tbarney fredbarney |
/fred.*barney/ | fred가 나오고 그 뒤에 어디든 barney가 나오는 모든 줄은 일치 (잡동사니 패턴) |
/fred +barney/ | fred barney fred barney fredbarney는 일치하지 않음 |
/bamm-?bamm/ | bamm-bamm bammbamm |
패턴 | 의미 |
/a{5,15}/ | a를 5번에서 15번 반복한 문자열과 일치 |
/(fred){3,}/ | 세 개 또는 그 이상 fred가 있으면 일치 |
/\w{8}/ | 정확히 단어로 쓸 수 있는 8개문자와 일치 |
/,{5}chamelon/ | ,,,,,chamelon 과 일치 |
/a{0,}/ | /a*/ 과 같음 |
/a{1,}/ | /a+/ 과 같음 |
/a{0,1}/ | /a?/ 과 같음 |
위치 지정
^ | 입력 문자열의 시작 부분에서 그 다음 나오는 문자나 부분식과 일치하는지 검사 |
\A | 어떤 정규식에서는 ^의 역할을 함 |
$ | 문자열의 끝과 일치 |
\Z | 어떤 정규식에서는 $의 역할을 함 |
\b | 단어 경계(단어와 공백 사이의 위치)와 일치 예) 'st\b'는 "test"의 st는 찾지만, "tester"의 st는 찾지 않음 !주의! test test 에서 test 사이의 빈공간인 space와는 다른 의미 |
\B | \b와 반대(비단어 경계)로 일치. 즉 "\b"의 예제의 반대 결과가 나옴 |
문자 집합 | 일치 |
[^def] | d와 e, f 세 문자를 제외한 모든 단일 문자와 일치합니다. |
[^n\-z] | n, 빼기 기호(-), z를 제외한 모든 문자와 일치(빼기 기호 앞에 역슬래시를 붙인 것이 주의. 빼기 기호는 메타문자) 하지만 /HAL-[0-9]+/ 패턴의 빼기 기호는 역슬래시로 회피할 필요가 없음. 왜냐하면, 문자 집합 밖 에서의 빼기 기호는 더 이상 메타 문자가 아님 |
패턴 | 의미 |
/^fred|barney$/ | 문자열 앞의 fred나 문자열 끝의 barney와 일치 |
/^(fred|barney)$/ | 줄 전체가 fred 또는 barney로만 구성되어 있는 문자열과 일치 |
/(wilma|pebbles?)/ | wilma나 pebbles 또는 pebble과 일치 |
/^(\w+)\s+(\w+)$/ | '단어'와 약간의 공백 문자 그리고 또 다른 '단어'만 있는 문자열이 있는 줄과 일치 (fred flintstone) |
패턴 | 일치하는 문자열 | 일치하지 않는 문자열 |
/^fred/ | 문자열의 첫 부분에 fred가 나올 때만 일치 | manfred mann |
/rock$/ | 문자열의 끝 부분에 rock이 나올 때만 일치 | knute rockne |
/^\s*$/ | 탭이나 스페이스를 포함한 빈 줄을 일치시키는 패턴 |
특수한 문자
[\b] | 역스페이스 |
\cx | x로 표시된 제어문자 찾기. x는 [A-Za-z] 이어야 함. 아니면 c는 리터럴 'c'로 간주 예) \cM = Control-M 이나 캐리지 리턴 문자. |
\d | 모든 숫자와 일치. [0-9]와 동일 |
\D | \d와 반대. [^0-9]와 동일 |
\f | 용지 공급 문자 찾기. 페이지 넘기기(formfeed) = \x0a3, \cL |
\n | 줄 바꿈 문자 찾기. \x0a, \cJ |
\r | 캐리지 리턴. \x0d, \cM |
\s | 공백, 탭, 용지 공급 등과 같은 문자 찾기. [\f\n\r\t\v] |
\S | \s와 반대로 일치. [^\f\n\r\t\v] |
\t | 탭 문자 찾기. \x09, \cI |
\v | 세로 탭 문자 찾기. \x0b, \cK |
\w | 영숫자 문자나 밑줄과 일치. [a-zA-Z0-9_] |
\W | \w와 반대로 일치. [^a-zA-Z0-9_] |
\xn | n으로 표시된 16진수 이스케이프 값과 일치. 16진수는 정확히 2자리여야 함 |
\0n | n으로 표시된 8진수 숫자와 일치. 가급적 사용하지 않는 것이 좋음 |
축약형 | 동일문자 집합 | 예시 |
\d | [0-9] | /HAL-[0-9]+/는 /HAL-\d+/와 같음 |
\w | [A-za-z0-9] | /fred \w+ barney/ fred와 빈 칸, '단어'가 나온 후 바로 다음에 빈 칸과 barney가 나오는 문자열과 일치할 것입니다. 즉 fred와barney 사이에 하나의 단어가 있되 단어 양 끝이 하나의 빈 칸으로 구분된 문자열과 일치할 것입니다. |
\s | [\f\t\n\r ] | 공백문자를 일치시킬 때 사용하기 좋음 |
축약형 | 동일문자집합 | 축약형의 반대 | 동일문자집합 |
\d | [0-9] | [^\d], \D | [^0-9] 숫자가 아닌 문자 |
\w | [A-za-z0-9] | [^\w], \W | [^A-za-z0-9] 단어가 아닌 문자 |
\s | [\f\t\n\r ] | [^\s], \S | [^\f\t\n\r ] 공백 문자가 아닌 문자 |
역참조와 전후방탐색
(pattern) | 하위 표현식 정의. 패턴을 찾아 일치하는 항목을 캡처하는 부분식. 가로 자체 '('나 ')'를 찾고 싶으면 '\'를 붙여 이스케이프하면 된다. '\(', '\)' |
\1 | 첫 번째 일치한 하위 표현식, 두 번째 일치한 하위 표현식은 \2로 표기 |
(?=pattern) | 전방탐색 |
(?!pattern) | 부정형 전방탐색 |
?(BR4)true | 조건 지정 |
?(BR)true|false | else 표현식 조건 지정 |
패턴 | 설명 |
---|---|
단순히 fee|fie|foe라고 쓰는 것 보다 가독성이 좋아졌다 | |
()로 감싸인 foobar전체 문자열이 2~3번 반복된 경우와 매칭하게 된다. (foobarfoobar 또는 foobarfoobarfoobar 이상 두가지 경우와 매칭할 것이다) | |
위의 예에서 ()를 뺀 경우이다. 앞의 문자열이 fooba든 아니든 마지막 문자r이 2~3번 반복된 문자열 즉, rr, rrr, 이 포함된 문자열과만 매칭할 것이다.(괄호를 뺐으니 {}직전의 한 문자와만 매칭한다) | |
foob([0-9]|a+)r | foob0r, foob8r, foobar, foobaar, foobaaaar, 등과 매칭할 것이다. |
패턴 | Replace | 설명 |
---|---|---|
두 단어의 순서를 바꾸고 그 사이에 컴머를 넣는 예. 예: "John Smith"-> "Smith, John". | ||
패턴 | 일치하는 문자열 |
/fred+/ | freddddddddd |
/(fred)+/ | fredfredfred |
/(fred)*/ | hello, world 대상 문자열이 비어있는 경우를 포함해 모 든 문자열에 대해 일치 |
패턴 | 일치하는 문자열 |
/fred|barney|betty/ | fred나 barney 아니면 betty를 언급한 모든 문자열과 일치합니다. |
/fred( |\t)+barney/ | 더하기(+)는 한 번 또는 여러 번 반복. 반복 할 때마다 ( |\t)는 빈칸이나 탭 문자와 일치할 기회를 가짐. 두 이름 사이에 빈 칸이나 탭 문자 중 적어도 하나는 존재해야 함. |
/fred( +|\t+)barney/ | fred와 barney 사이의 문자가 모두 빈 칸이거나 모두 탭이어야 함. |
/fred (and|or) barney/ | fred and barney 혹은fred or barney |
대소문자 변환
\E | \L 혹은 \U 변환을 끝냄 |
\l | 다음에 오는 글자를 소문자로 변환 |
\L | \E를 만날 때까지 모든 문자를 소문자로 변환 |
\u | 다음에 오는 글자를 대문자로 변환 |
\U | \E를 만날 때까지 모든 문자를 대문자로 변환 |
입력 | 패턴 | Replace | 결과 |
---|---|---|---|
test ExAmple | (.+) (.+) | $1 $2 | test ExAmple |
test ExAmple | (.+) (.+) | \U$1 $2 | TEST ExAmple |
test ExAmple | (.+) (.+) | $1 \L$2 | test example |
test ExAmple | (.+) (.+) | \u$1 \L$2 | Test example |
옵션
i | ignore case, 대소문자를 무시하여 찾음. 굳이 [a-zA-Z]라고 할 필요가 없음 |
g | global, 찾는 패턴을 하나만 찾지 말고 계속 해서 찾음. 탐욕적 수량자처럼 일치하는 구간을 늘리는 것이 아니라 일치하는 패턴의 개수가 늘어남 |
m | multiline, 다중행 모드라고도 하며 라인 별로 처리하는 것이 아니라 입력 문자열에 줄바꿈이 있어도 이를 특수문자로 변환하여 하나로 봄. 가장 큰 차이를 경험할 수 있는 기능은 ^와 $임. |
정규표현식 온라인 실습
다음은 정규표현식을 온라인에서 테스트 해볼 수 있는 사이트들이다. 공부하기도 좋고 코드에 적용하기 전에 확인하기도 좋다. 여러 사이트들이 있지만 아래 사이트들이 가장 마음에 들었다.
- Regex Hero: .NET(C#) 안에서 정규식을 사용할 때 할 수 있는 모든 것을 할 수 있다. 특히, Regex 옵션이 다른 개발언어와 사용방법이 조금 다른데 이런 것들을 적용할 수 있어서 매우 유용하다.
- RegExr: 일반적인 정규표현식을 테스트 해볼 수 있다. 다양한 예제와 사용법도 같이 제공하고 있다.
- regex101:
pcre (php), javascript, python의 정규식을 테스트해 볼 수 있다. 여기서 제공하는 기능 중 가장 마음에
드는 것은 MATCH INFORMATION를 제공한다는 것이다. 자신이 입력한 각 정규식 요소가 어떻게 일치하는지 설명해준다.
[출처] [개발자 강좌] 정규표현식 (정규식; Regex)|작성자 sensible
[출처] Renamer(리네이머)의 RegEx (정규표현식)|작성자 1900lee
[출처] http://egloos.zum.com/dryang/v/4005256
[출처] Perl 7_정규표현식|작성자 bitnang
'Academy I > Tech Academy' 카테고리의 다른 글
gcc 컴파일 과정 (0) | 2015.02.09 |
---|---|
sed(stream editor) (0) | 2015.02.04 |
[REGEX]Regular expression (0) | 2015.02.02 |
Awk (0) | 2015.02.02 |
assert와 매크로 함수를 이용한 디버깅 정보 얻기 (0) | 2015.01.22 |
Advanced Bash-Scripting - 문자열 (0) | 2015.01.22 |
Advanced Bash-Scripting - 특수문자 (0) | 2015.01.22 |
Advanced Bash-Scripting - 예제 (0) | 2015.01.22 |