이글루스 | 로그인  


정규표현식 |은 순서대로 매치

정규 표현식 엔진에서는 선택(|)이 나타나면 주어진 순서에 따라

왼쪽에서 오른쪽으로 체크합니다.

 

 

예제 1

[^(Subject|Date):]

 

위 정규식은 문자열 첫 부분(^)에서 'Subject'나 'Date'를 찾습니다.

여기서 시도는 왼쪽에 있는 'Subject'를 확인한 후 매치가 되면

정규표현식의 나머지 부분(:)을 확인합니다.

만약 이 부분이 매치되지 않을 경우(문자열이 'Subject;'인 경우)

백트래킹을 하여 'Date'를 확인합니다.

 

 

예제 2

문자열 : "Jan 30 is NoSyu's birthday!"

정규식1: s/Jan (0?[1-9]|[12][0-9]|3[01])/Oct 31/

정규식2: s/Jan ([12][0-9]|3[01]|0?[1-9])/Oct 31/

 

위 문자열은 틀린 문장입니다.

NoSyu의 생일은 Oct 31이기에

Jan 30을 찾아 Oct 31으로 바꿔야합니다.

숫자는 한 달에 나올 수 있는 숫자를 찾도록 되어있습니다.

 

정규식1과 정규식2는 안의 내용은 같지만 순서가 다릅니다.

순서에 상관없이 작동한다면 둘의 결과는 같아야하지만,

서로 다른 결과물을 내놓습니다.

 

 

정규식1이 매치가 제대로 되지 않았습니다.

이 이유는 처음에 나오는 '0?[1-9]'때문입니다.

0은 없어도 되기에 [1-9]가 'Jan 30'의 3에 매치가 되고

그 뒤에 표현식이 없기에 매치가 끝납니다.

따라서 'Jan 3'을 'Oct 31'로 바꾸었기에 틀린 결과물이 나옵니다.

 

그렇기에 정규식2에서는 짧은 텍스트에 매치될 수 있는 것을 뒤로 보내어

올바른 결과물을 도출하였습니다.

 

 

정규식2 외에도 'Jan (31|[123]0|[012]?[1-9])'도 가능합니다.

또, 'Jan (0[1-9]|[12][0-9]?|3[01]?|[4-9])'는 순서에 상관이 없이 매치됩니다.

 

 

참조

정규 표현식 완전 해부와 실습 Page 253~256

by NoSyu | 2007/11/28 16:36 | in Programming | 트랙백 | 덧글(2)

트랙백 주소 : http://NoSyu.egloos.com/tb/3967895
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by codebook at 2007/11/29 09:50
음~ 정규식 보다는 은근슬쩍 생일 광고를 하는 듯한 느낌이... ^^ 뭐~ 지나간지 얼마 안되었으니 다시 올려면 멀었네요. 하하하하하
Commented by NoSyu at 2007/11/29 09:59
/codebook/
책에서 예제로 'Jan 31'이 나왔습니다.
30, 31에서 문제가 발생하여 조금 수정을 해야하는데,
마침 제 생일과 관계가 있어 적었습니다.^^
생일이 다시 오면... 기부해야죠.^^
(이제 선물은...OTL....)

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶