2011-09-14 2 views
0

이 질문에서 How to match this using regex정규식을 사용하여 두 번째 발생을 감지하는 방법은 무엇입니까? (PHP)

지금은 사용자가 제출 한 데이터에서 3D D 키워드를 검색하고 싶습니다. 이 규칙은 3D와 D가 문장에 존재하는 한 유효합니다 (대소 문자를 구분하지 않음). 예를 들어

:

3Dzzzzzzzzzzzzzzzzzzz (무효 때문에 D의 더 초 선두로부터 없음)
zzzzzD
xxx3DzzzzzD (때문에 유효한 문자열에 3D 및 D를 가지고 안함) (3D가 있기 때문에 무효)

지금이 정규식을 사용하고 있지만 어떻게 든 문제가 하나 있습니다.

$subject = 'BLASHSH*3D*8qw9e08e2323*D*'; 

if(preg_match('/(?=.*3D)(?=.*D).*/i', $subject)) 
{ 
    echo 'pattern match'; 
} 
else 
{ 
    echo 'fail'; 
} 

문제
3D ABC (이것은 잘못된 없어야 문자열도 (D 전혀 번째 발생이 때문에 무효라고한다)에 해당

3D를 반환 때문에 D의 어떤 초 발생하지)

어떻게 해결할 수 있습니까? 규칙이 3D 후, 또는 사이에 (제로 문자를 포함), D에 출석해야하며, 이전 문자의 수를 가질 수있는 경우

답변

2

D3D3DD 가정

/(3D.*D)|(D.*3D)/i 

그리고 난 당신이 3dd에 동의한다고 가정하기 전에 당신은 i 수정을 사용하기 때문에 : 및 cccDzzz3D 모든 유효? 정규 표현식의 끝에서 i을 제거하지 않으면됩니다.

+0

3D와 같은 소리가 두 번째 D 앞에 와야합니다. 올바르게 이해하면. –

+0

예 대소 문자를 구분하지 않습니다. D도 3D 이전이 될 수 있습니다. 감사. – cyberfly

1

이 충분합니다 :

/3D.*D/i 
관련 문제