정규표현식 메모 조건식 또는 조건문 #2 도구

한발자국 더 나가보자.

데이타            bc bd abc abd abf

정규표현식      [ab](?(?<=a)bc|d)

캡쳐그룹이 없어졌고 조건식만 있는 타입이다.

(?(조건식)예|아니오) 구문에서 
조건식이 참이라면 [예]가 매치되고 거짓이라면 [아니오]가 매치된다.

(조건식)이 그룹을 지정표시하던 (1) 에서 (?<=a)로 바뀐것 뿐이다.
후방참조이고 의미는 현재위치에서 왼쪽으로 가서 a를 찾아라는 뜻이다.
이어보면 
현재위치에서 왼쪽으로가서 a를 찾아봐서 a가 있으면 bc를 선택하고 a가 없으면 d를 선택하라 이다.

[ab]는 a 또는 b 이니까 
[ab](?(?<=a)bc|d)의 전체의미는 abc 또는 bd 가 된다. (abc|bd)와 같다.

perl 에서 돌려보면

use 5.010;
@data = qw(bc bd abc abd abf);
$regex = qr/[ab](?(?<=a)bc|d)/;

for(@data){
    say $_ if /$regex/;
}

결과값
bd
abc
abd

마지막의 abd 는 bd가 매치된 결과로 같이 나타난것이다.
물론 ^를 사용해서 검색에서 제외할 수 있다.

$regex = qr/^[ab](?(?<=a)bc|d)/;






덧글

댓글 입력 영역