php regex - 从字符串的开头和结尾匹配

时间:2011-11-26 12:21:52

标签: php regex

我使用在线正则表达式测试程序来构建一个简单的正则表达式,但是使用php的preg_match它为$提供了一个未知的修饰符。

这是正则表达式:

if (preg_match('/(^Keyword1/$|^Keyword2/$)/', $input, $matches)) 

我要做的是检查$ input是否等于Keyword1 /或Keyword2 /(完全匹配)。我知道我可以使用“if($ input =='Keyword1 /')轻松完成此操作”但是我宁愿在代码中使用几行正则表达式和十几个if语句。

有人帮帮我吗?

3 个答案:

答案 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在结束分隔符后接受正则表达式修饰符,如smi。但在你的情况下,PHP在结束分隔符后看到$。由于$不是有效修饰符,因此您会收到警告:

  

PHP警告:preg_match():......中的未知修饰符'$'

答案 1 :(得分:1)

问题是你在正则表达式中使用了/而没有逃避它。

这是你正在寻找的东西,但可能会更好一点:

'/^(Keyword1|Keyword2)\\/$/'

答案 2 :(得分:1)

怎么样:

preg_match('/^Keyword[1-2]\/$/', $input, $matches)