2012-07-30 6 views
0

다음 예는 lookahead 어설 션을 조건으로 사용하는 방법에 대한 것입니다.Lookahead, 정규 표현식의 lookbehind 조건

조건은 다음에 문자가 아닌 문자의 선택 순서와 일치하는 긍정적 예측 주장은 다음과 같습니다 다음은이 정규식에 대한 설명입니다 http://www.php.net/manual/en/regexp.reference.conditional.php

(?(?=[^a-z]*[a-z]) 
\d{2}-[a-z]{3}-\d{2} | \d{2}-\d{2}-\d{2}) 

: 난에서 PHP 매뉴얼에 그것을 발견 . 즉, 주제에 적어도 하나의 문자가 있는지 테스트합니다. 편지가 발견되면, 그 주제는 첫 번째 대안과 대조됩니다; 그렇지 않으면 두 번째와 일치합니다. 이 패턴은 dd-aaa-dd 또는 dd-dd-dd 형식 중 하나의 문자열과 일치합니다. 여기서 aaa는 문자이고 dd는 숫자입니다.

아무도 우리가이 예제의 조건으로 lookahead 어서션을 사용하는 이유를 말할 수 있습니까? 우리가 lookbehind 단언을 사용하지 않는 이유는 무엇입니까? 나는 그들이 어떻게 주제 문자열과 일치하는지 모르기 때문에 이런 조건으로 사용될 때 혼란 스럽다. 미리 감사드립니다!

답변

1

이 경우 우리는 lookahead 어설 션을 사용하여 사용할 정규 표현식을 결정합니다. 일치하는 날짜가 01-Jan-1201-01-12 사이 인 것으로 보입니다. Lookahead 어설 션은 우리가 일치시키려는 문자가 있다면 \d{2}-[a-z]{3}-\d{2}을 사용하여 01-Jan-12을 시도하고 일치시키지 않으면 \d{2}-\d{2}-\d{2}을 사용하여 01-01-12을 시도하고 일치시킵니다.

+0

두 번째 질문에 대해 설명해주십시오.이 경우 표제어 사용을 선택하지 않는 이유는 무엇입니까? –

+1

정규식을 사용해야하는 * 사전에 * 알고 싶기 때문에. 문자열 시작 부분에 lookbehind를 사용하면 일치 할 것이 없습니다. 그 시점 이후 우리는 일치시키고 자하는 일부 데이터를 잃어 버렸습니다. – Gareth

+0

답변 해 주셔서 감사합니다. –