파이어맨 이야기

정규표현식 엔진 옵션(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에 적의되지 않은 문자 매칭

\X

"eXtended grapheme cluster" 유니코드 매칭

\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


공유하기

facebook twitter kakaoTalk kakaostory naver band