我使用在线正则表达式测试程序来构建一个简单的正则表达式,但是使用php的preg_match它为$提供了一个未知的修饰符。
这是正则表达式:
if (preg_match('/(^Keyword1/$|^Keyword2/$)/', $input, $matches))
我要做的是检查$ input是否等于Keyword1 /或Keyword2 /(完全匹配)。我知道我可以使用“if($ input =='Keyword1 /')轻松完成此操作”但是我宁愿在代码中使用几行正则表达式和十几个if语句。
有人帮帮我吗?
答案 0 :(得分:5)
您需要转义正则表达式中的/
,因为/
也被用作分隔符:
if (preg_match('/(^Keyword1\/$|^Keyword2\/$)/', $input, $matches))
^ ^
或者使用不同的分隔符:
if (preg_match('~(^Keyword1/$|^Keyword2/$)~', $input, $matches))
^ ^
由于你的子正则表达式都有共同的锚点,你可以简化你的正则表达式:
if (preg_match('~^(Keyword1|Keyword2)/$~', $input, $matches))
为什么正则表达式中出现警告?
'/(^Keyword1/$|^Keyword2/$)/'
由于您使用/
作为分隔符,因此正则表达式中的第二个/
使PHP认为它是正则表达式的结尾。现在,PHP在结束分隔符后接受正则表达式修饰符,如s
,m
,i
。但在你的情况下,PHP在结束分隔符后看到$
。由于$
不是有效修饰符,因此您会收到警告:
PHP警告:preg_match():......中的未知修饰符'$'
答案 1 :(得分:1)
问题是你在正则表达式中使用了/
而没有逃避它。
这是你正在寻找的东西,但可能会更好一点:
'/^(Keyword1|Keyword2)\\/$/'
答案 2 :(得分:1)
怎么样:
preg_match('/^Keyword[1-2]\/$/', $input, $matches)