2012-07-03 3 views
1

an?|the이 작동하지 않는 이유는 무엇입니까? PHP의 preg_match()를 사용하고 있습니다.PHP 정규식 : 수량 한정 기호를 포함하는 OR 문

전체 정규식은 "/^an?|the (.+?) (is|was) an? (.+?)$/"입니다.

"the mona lisa is a painting""a dog is an animal"과 일치하도록하고 싶습니다.

첫 번째 문자열 예제를 수용하기 위해 |the에 추가 할 때까지 제대로 작동했습니다.

감사합니다.

+0

음, 주위에'()'가 있어야한다고 생각합니다. – Corbin

+0

아. 그러나 그것은 $ matches 배열의 일부가됩니다. 이것은 나에게 매우 불편합니다. 가능한 해결 방법은 무엇입니까? – JoeRocc

+1

비 저장 괄호 (적절한 이름이 나를 이스케이프 처리 함) :'(? : an? | the)' – Corbin

답변

3

그것은 당신이 원하는 것을 분명히하지 않은

^an? 

또는

the (.+?) (is|was) an? (.+?)$ 

를 사용하여 일치하거나 그것을 당신이 쓴 방법.

/^(an?|the) (.+?) (is|was) an? (.+?)$/ 

이 결과에 포함되는 그룹을 방지 구문은 (?:)하는 일치하지 않는 그룹을 사용하려면 : 당신은 괄호에 당신이 is|was 함께했던 방법을 넣어해야합니다. 그래서 이것을 다음과 같이 사용하십시오 :

/^(?:an?|the) (.+?) (is|was) an? (.+?)$/ 
+0

당신은 영주입니다! 감사. – JoeRocc