정규표현식 엔진 옵션(Perl 5 version 24.0)
1.패턴 변경자(Directives, Flags modifiers or Option letters)
- 문자 탐색시 특별한 지시를 내리는 기호
기호 |
설명 |
m |
- 멀티라인으로된 라인을 탐색 |
s |
- 1개의 라인을 탐색 |
i |
- 대소문자 구분 패턴매칭 |
x |
- 공백과 주석을 허용하여 패턴의 가독성 확장 |
p |
- 매칭된 문자를 보존하는 기능 허용 - ${^PREMATCH} , ${^MATCH} , and ${^POSTMATCH} |
a ,aa, d, l, u |
- 5.14버전이후 유니코드 문자 룰로 변경 |
n |
캡쳐 기능 사용 못하게 하는 옵션 단, 네임드 캡쳐 기능 사용가능 |
c |
반복 매칭 중 현재 위치 유지 (일반적인 정규표현식 옵션 X) |
g |
문자열에서 패턴 매칭이 반복되는 문자를 전체에서 찾기 (일반적인 정규표현식 옵션 X) |
e |
정규 표현식 오른쪽을 평가 (일반적인 정규표현식 옵션 X) |
ee |
오른쪽 평가 후 결과를 eval 함수 호출 (일반적인 정규표현식 옵션 X) |
o |
코드에서 실제 버그를 찾아주는 옵션 |
r |
기존 문자를 그대로 유지하고 변경된 문자 리턴 |
2.메타문자(Metacharacters)
- 특수한 기능을 하는 문자
기호 |
설명 |
\ |
다음에 오는 문자를 이스케이프 |
^ |
시작 라인 찾기 |
. |
시작 라인을 제외한 모든 문자 찾기 |
$ |
문자의 종료부분 매칭 |
| |
Or 문으로 2중 매칭 |
() |
그룹핑 |
[] |
괄호 문자 클래스 |
3.탐욕적 수량자 (greedy quantifier)
- 요소를 찾을 때 최대한 많은 요소를 적용 (뒤에서부터 검색)
기호 |
설명 |
+ |
한번 이상 매칭 |
* |
0번 이상 매칭 |
? |
1번 또는 0번 매칭 |
{n} |
정확히 n번 반복되는 문자 매칭 |
{n,} |
N번 이상 반복되는 문자 매칭 |
{m,n} |
문자가 m~n사이에 반복 |
4.게으른 수량자 (lazy quantifier, Non-greedy quantifiers)
- 요소를 찾을 때 최대한 적은 요소를 적용 (앞에서부터 검색)
기호 |
설명 |
+? |
1 이상 매칭 (탐욕적 X) |
*? |
0 이상 매칭 (탐욕적 X) |
?? |
0 또는 한번 반복 매칭 (탐욕적 X) |
{n}? |
N번 반복되는 문자 매칭 (중복) (탐욕적 X) |
{n,}? |
문자가 n번 이상 반복(탐욕적 X) |
{n,m}? |
적어도 n번에서 m번 이하로 반복 매칭 (탐욕적 X) |
5.소유 수량자 (possessive quantifiers)
- 백 트랙을 하지 않는 수량자
기호 |
설명 |
*+ |
0 이상 매칭 , 뒤에 어떤 것도 주지 않음 |
++ |
1 이상 매칭, 뒤에 어떤 것도 주지 않음 |
?+ |
0 또는 한번 매칭 , 뒤에 어떤 것도 주지 않음 |
{n}+ |
N번 반복되는 문자 매칭 (중복) , 뒤에 어떤 것도 주지 않음 |
{n,}+ |
문자가 n번 이상 반복 매칭, 뒤에 어떤 것도 주지 않음 |
{n,m}+ |
적어도 n번에서 m번 이하로 반복 매칭,뒤에 어떤것도 주지 않음 |
6. Escape sequences
- 특수한 문자로 대치 되는 문자
기호 |
설명 |
\t |
탭(HT, TAB) |
\n |
새로운 라인 (LF, NL) |
\r |
캐리지 리턴 문자 (CR) |
\f |
용지 공급 문자 (FF) |
\a |
알람 (BEL) |
\e |
Escape (ESC) |
\cK |
Control char(example: VT) |
\x{}, \x00 |
주어진 16진수의 문자 |
\N{name} |
Name의 유니코드 문자 또는 문자 순서 |
\N{U+263D} |
유니코드 문자 (예: FIRST QUARTER MOON) |
\o{}, \000 |
주어진 8진수 문자 |
\l |
다음 소문자 |
\u |
다음 대문자 |
\L |
\E까지의 소문자 |
\U |
\E까지의 대문자 |
\Q |
\E까지 패턴 메타문자 사용 안함 |
\E |
수정이나 인용을 종료 |
- Character Classes and other Special Escapes
기호 |
설명 |
[…] |
“…”에 정의된 괄호 문자 예) [a-z]는 ‘a’ 또는 ‘매칭’ |
[[[:…:]]] |
“…”에 POSIX의 escape문자를 넣는다. 예) [[:upper:]] 는 대문자 찾기 |
(?[…]) |
확장된 괄호 정의 문자 |
\w |
숫자, 영문자, 언더바(_)와 일치 |
\W |
\w와 반대로 일치 |
\s |
공백(whitespace) 일치 |
\S |
공백을 제외한 나머지 문자 일치 |
\d |
십진수 문자 일치 |
\D |
숫자를 제외한 문자 |
\pP |
P의 정의된 프로퍼티를 매칭 , 유니코드 매칭 예) \p{Prop} |
\PP |
P에 적의되지 않은 문자 매칭 |
|
|
\1 |
캡처된 그룹이나 버퍼 역참조, 1은 그룹 숫자 |
\g1 |
이전 그룹이나 특정 그룹에 역참조 |
\g{-1} |
상대적으로 이전 그룹에 역참조 예) g{-1} 는 마지막 캡쳐 그룹 |
\g{name} |
캡쳐그룹을 이름으로 역참조 |
\k<name> |
캡쳐그룹을 이름으로 역참조 |
\K |
\K의 왼쪽을 유지하고 $&안에 그것을 포함하지 않음 |
\N |
\n을 제외한 모든 문자, /s에 의해 영향받지 않음 |
\v |
세로 공백(Vertical whitespace) |
\V |
세로 공백 제외(Not vertical whitespace) |
\h |
수평 공백(Horizontal whitespace) |
\H |
수평 공백 제외 (Not horizontal whitespace) |
\R |
라인 종료 문자 (Linebreak) |
7.Assertions
기호 |
설명 |
\b{} |
특별한 타입의 유니코드 매칭 |
\B{} |
\b{}에 일치하지 않는 곳을 매칭 |
\b |
단어 범위(word boundary) |
\B |
단어 범위를 제외한 일치 |
\A |
문자의 시작점에만 일치 |
\Z |
문자의 끝, 새 줄 전에 끝 |
\z |
문자의 끝만 매칭 |
\G |
Pos()에만 매칭 (예: at the end-of-match position of prior m//g) |
8. Captures groups
- 현재 정규표현의 캡쳐한 내용을 buffer에 저장해 두었다가 나중에 사용하는 기능
- () 를 사용하여 캡쳐 그룹 설정
9. 메타문자 인용
- Perl에서는 백슬러쉬(\)를 사용하여 메타 문자 매칭 (Perl에서는 백슬러쉬를 사용한 메타문자는 모두 영문이나 숫자로 되어있음)
기호 |
설명 |
\\ |
\문자 매칭 |
\( |
\b{}에 일치하지 않는 곳을 매칭 |
\) |
단어 범위(word boundary) |
\[ |
단어 범위를 제외한 일치 |
\] |
문자의 시작점에만 일치 |
\{ |
문자의 끝, 새 줄 전에 끝 |
\} |
문자의 끝만 매칭 |
\Q |
\E까지는 (Escape sequences 에 있는 내용으로 중복) |
10.확장 패턴
- Awk나 lex같은 일반적인 도구에서 사용되지 않는 기능
이름 |
기호 |
설명 |
코멘트 |
(?#text) |
Comment정보 입력 |
멀티 변경자 |
(?^alupimnsx) |
하나이상의 변경자 사용 (패턴변경자에 상세설명 참고) 예) ((?i)foobar) - foobar 대소문자 구분 |
캡처 그룹 번호 리셋 |
(?|pattern) |
‘|’ 문자 구분에 따라 캡쳐 그룹 번호가 별도록 생기도록 하는 기능 |
전방탐색 |
(?=pattern) |
작성한 패턴에 일치하는 경우 (전방의 문자만 표시) |
부정형 전방 탐색 |
(?!pattern) |
작성한 패턴이 일치하지 않을 경우 (전방의 문자만 표시) |
후방탐색 |
(?<=pattern) |
패턴과 일치하는 뒤 문자 검색 예) /(?<=\t)\w+/ 는 탭 뒤의 문자 검색 |
부정형 후방탐색 |
(?<!pattern) |
작성한 패턴이 일치하지 않는 뒤 문자 검색 예) /(?<!bar)foo/ 는 앞에 bar가 아닌 foo문자검색 |
네임드 캡처 |
(?'NAME'pattern), (?<NAME>pattern) |
정규표현식에 이름을 부여하여 같은 정규표현식을 다시 재사용 |
네임드 백레퍼런스 |
\k'NAME , (?P=NAME) ' |
일치하는 문자의 값에 이름을 부여하여 사용 |
코드삽입 |
(?{ code }) |
정규표현식에 Perl 코드를 삽입하여 사용 |
재귀(Recursion) |
(?PARNO), (?-PARNO), (?+PARNO), (?R) , (?0) |
PARNO는 0이 아닌 숫자 (?R) : 전체 패턴을 재시작 (?0) : (?R) 위한 대체문자 (?-1) : 가장최근에 호출된 캡쳐그룹 (?2) : 캡쳐그룹 2번에서 재귀 |
네임드 재귀 |
(?&NAME) (?P>NAME) |
이름을 통해 재귀 |
조건부 |
(?(condition)yes-pattern|no-pattern) (?(condition)yes-pattern) |
Condition의 사실일 경우 yes-pattern매칭 아니면 no-pattern매칭 |
독립된 서브표현식 |
(?>pattern) |
백트래킹을 하지 않는 독립된 서브표현식 |
캡처 제외 |
(?:pattern) |
캡쳐 기능 사용 안하는 옵션 패턴변경자의 n과 같은 기능 |
11.백트래킹 제어 명령어
- 백트래킹 과정을 세부적으로 제어할 수 있는 명령어
기호 |
설명 |
(*PRUNE) (*PRUNE:NAME) |
백트래킹을 금지할 때 사용 (?>pattern)과 일부 경우 같이 동작함 |
(*SKIP) (*SKIP:NAME) |
앞의 패턴이 일치할 경우 뒤의 패턴은 (SKIP)의 지점부터 일치 확인 |
(*MARK:NAME) (*:NAME) |
특정 지점을 표시해놓는 기능 |
(*THEN) (*THEN:NAME) |
앞의 정규 표현이 일치하면 백트래킹을 통해 일치 확인 예) ( A (*THEN) B | C ) |
(*COMMIT) (*COMMIT:args) |
패턴이 일치할 경우 남은 부분은 실패처리 |
(*FAIL) (*F) (*FAIL:arg) |
(?!)와 같은 기능으로 강제로 엔진에 실패 처리합니다. |
(*ACCEPT) (*ACCEPT:arg) |
(*ACCEPT) 도달하는 지점으로 패턴을 강제로 일치하는 것으로 처리 |
참고 링크:http://perldoc.perl.org/perlre.html#Regular-Expressions
[정적분석 테스트프로그램] PMD프로그램 사용하는 방법 (0) | 2016.09.07 |
---|---|
PDF에서 Text읽어오기 ( PDFbox모듈 사용 ) (0) | 2016.08.30 |
Junit & Ant를 이용한 테스트 결과 리포트 생성하기 (0) | 2016.08.17 |
소프트웨어 아키텍쳐 표준 IEEE 42010 (0) | 2016.06.06 |
폴더리스트를 가져와서 알집 명령어로 압축하기 (0) | 2015.11.24 |