php正则表达式-从字符串的开头和结尾匹配

php正则表达式-从字符串的开头和结尾匹配,php,regex,Php,Regex,我使用了一个在线正则表达式测试程序来构建一个简单的正则表达式,但是使用php的preg_match,它为$提供了一个未知的修饰符 以下是正则表达式: if (preg_match('/(^Keyword1/$|^Keyword2/$)/', $input, $matches)) 我要做的是检查$input是否等于关键字1/或关键字2/(精确匹配)。我知道我可以很容易地用“if($input=='Keyword1/')来实现这一点,但是我更希望代码中有几行正则表达式,而不是十几条if语句 有人

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

以下是正则表达式:

if (preg_match('/(^Keyword1/$|^Keyword2/$)/', $input, $matches)) 
我要做的是检查$input是否等于关键字1/或关键字2/(精确匹配)。我知道我可以很容易地用“if($input=='Keyword1/')来实现这一点,但是我更希望代码中有几行正则表达式,而不是十几条if语句


有人帮我吗?

您需要转义正则表达式中的
/
,因为
/
也被用作分隔符:

if (preg_match('/(^Keyword1\/$|^Keyword2\/$)/', $input, $matches)) 
                           ^            ^ 
if (preg_match('~(^Keyword1/$|^Keyword2/$)~', $input, $matches)) 
                ^                         ^
或者使用不同的分隔符:

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():中的未知修饰符“$”


问题是您在正则表达式中使用了
/
,但没有对其进行转义

以下是您想要的,但可能更好一点:

'/^(Keyword1|Keyword2)\\/$/'
那么:

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

[12]
也会这样做,但我将假设“keyword1”只是一个示例,而不是他正在寻找的实际字符串。注意,您也可以在数组中使用允许的关键字数组和