[英]How to detect second occurrence using regex? (php)
从这个问题如何使用正则表达式匹配
现在,我想从用户提交的数据中搜索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)
如何解决呢?
假设3DD
, D3D
和cccDzzz3D
均有效:
/(3D.*D)|(D.*3D)/i
并且由于您在我假设要接受3d
和d
之前使用过i
修饰符? 如果不是,则从正则表达式的末尾删除i
。
如果规则是3D必须出现在D之前,并且可以在D之前,之后或之间包含任意数量的字符(包括零个字符),则这足够了:
/3D.*D/i
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.