2011-09-14 9 views
0

この質問からHow to match this using regexregexを使用して2番目のオカレンスを検出する方法は? (PHP)

今、私はユーザーから提出されたデータから3D Dキーワードを検索したいと思います。このルールは、3DとDが文章内に存在する限り有効です(大文字と小文字は区別されません)。例えば

3Dzzzzzzzzzzzzzzzzzzz(Dのない第二出現ため無効)
zzzzzD(NO 3Dため無効)
xxx3DzzzzzD(有効な文字列で3DおよびDを得たので)

私は今この正規表現を使用していますが、何とかそれは1つの問題があります。

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

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

問題は、この文字列はまた真

3D(それはDのない第二発生するので無効であるべきである)
立体ABC(それはDのない第二発生するので無効であるべきであるが返されています)

これを解決するには?ルールは、3Dの後、または間に(ゼロ文字を含む)、Dの前に現れなければならず、前に任意の数の文字を持つことができるということである場合

答えて

2

は、D3D3DDを仮定します、およびcccDzzz3Dはすべて有効です。

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

そして、私はあなたが3ddを受け入れるようにしたいと仮定する前にi修飾子を使用するので?正規表現の末尾からiを削除しない場合は、

+0

3Dのような音が2番目のDの前に来なければなりません。正しく理解してください。 –

+0

はい、大文字と小文字は区別されません。 Dも3Dの前になることができます。ありがとう。 – cyberfly

1

、これが十分でなければならない:

/3D.*D/i 
関連する問題