从这个问题How to match this using regex
现在我想从用户提交的数据中搜索3D D关键字。规则是只要句子中存在3D和D,它就是有效的(不区分大小写)。
例如:
3Dzzzzzzzzzzzzzzzzzzzzz(无效,因为没有D的第二次出现)
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)
如何解决这个问题?
答案 0 :(得分:2)
假设3DD
,D3D
和cccDzzz3D
都有效:
/(3D.*D)|(D.*3D)/i
由于您在我假设您要接受i
和3d
之前使用了d
修饰符?如果不只是从正则表达式的末尾删除i
。
答案 1 :(得分:1)
如果规则是3D必须出现在D之前,并且可以在之前,之后或之间(包括零个字符)包含任意数量的字符,这应该足够了:
/3D.*D/i