2011-09-14 51 views
0

來自這個問題How to match this using regex如何使用正則表達式檢測第二次發生? (php)

現在我想從用戶提交的數據中搜索3D D關鍵字。規則只要3D和D出現在句子中,它就是有效的(不區分大小寫)。

例如:

3Dzzzzzzzzzzzzzzzzzzz(無效的,因爲d的沒有第二occurence)
zzzzzD(無效的,因爲沒有3D)
xxx3DzzzzzD(因爲有效字符串得到3D和d)

我現在使用這個正則表達式,但不知何故它有一個問題。

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

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

問題是這樣的字符串也將返回true

3D(它應該是無效的,因爲d沒有第二次出現)
3D ABC(它應該是無效的,因爲d沒有第二次出現)

如何解決這個問題?

回答

2

假設3DDD3DcccDzzz3D都是有效的:

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

而且由於你使用的i修改之前,我假設你要接受3dd?如果不是從正則表達式的末尾刪除i

+0

像3D一樣的聲音必須在第二個D之前出現。如果我理解正確。 –

+0

是的,它是不區分大小寫的。也可以在3D之前變成D。謝謝。 – cyberfly

1

如果規則是3D必須之前d出現,並且可以以前有任何數目的字符,之後或在之間(包括零個字符),這應該是足夠的:

/3D.*D/i 
相關問題