php正则表达式 - 从字符串的开始和结尾匹配
我使用了一个在线正则表达式测试器来构建一个简单的正则表达式,但是使用php的preg_match它给出了一个未知的修饰符$。php正则表达式 - 从字符串的开始和结尾匹配
这里是正则表达式:
if (preg_match('/(^Keyword1/$|^Keyword2/$)/', $input, $matches))
我试图做的是检查,如果$输入等于或者关键字1 /或关键字2 /(精确匹配)。我知道我可以很容易地用“if($ input =='Keyword1 /')”做到这一点,但我宁愿有几行正则表达式与代码中的一打if语句。
有人帮我解决吗?
你需要躲避正则表达式内/
,因为/
也被用来作为分隔符:
if (preg_match('/(^Keyword1\/$|^Keyword2\/$)/', $input, $matches))
^ ^
或者使用不同的分隔符:
if (preg_match('~(^Keyword1/$|^Keyword2/$)~', $input, $matches))
^ ^
因为两个你子regexs有共同的锚你可以简化你的正则表达式为:
if (preg_match('~^(Keyword1|Keyword2)/$~', $input, $matches))
为什么在你的正则表达式中的警告?
'/(^Keyword1/$|^Keyword2/$)/'
由于您使用/
作为分隔符,第二/
在你的正则表达式使得PHP认为这是你的正则表达式的结束。现在PHP在结束分隔符后接受正则表达式修饰符,如s
,m
,i
。但在你的情况下,PHP在结束分隔符后看到一个$
。由于$
是不是一个有效修改你得到警告:
PHP的警告:的preg_match():未知的修饰 '$' 在...
正是我需要的,谢谢! – Joe
的问题是,你使用的/
在你的正则表达式中,而不是逃避它。
这里就是你要找的东西,但也许更好一点:
'/^(Keyword1|Keyword2)\\/$/'
什么:
preg_match('/^Keyword[1-2]\/$/', $input, $matches)
'[12]'会做同样的事情,但我会假定“keyword1”只是一个例子,而不是他正在寻找的* actual *字符串。 – nickf
@nickf是的没错 – 2011-11-26 12:30:31
注意,你也可以使用关键字允许的数组和'in_array' – 2011-11-26 12:32:41