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

Joe*_*Joe 2 php regex

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

这是正则表达式:

if (preg_match('/(^Keyword1/$|^Keyword2/$)/', $input, $matches)) 
Run Code Online (Sandbox Code Playgroud)

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

有人帮帮我吗?

cod*_*ict 5

你需要逃避/正则表达式内部,因为/它也被用作分隔符:

if (preg_match('/(^Keyword1\/$|^Keyword2\/$)/', $input, $matches)) 
                           ^            ^ 
Run Code Online (Sandbox Code Playgroud)

或者使用不同的分隔符:

if (preg_match('~(^Keyword1/$|^Keyword2/$)~', $input, $matches)) 
                ^                         ^
Run Code Online (Sandbox Code Playgroud)

由于你的子正则表达式都有共同的锚点,你可以简化你的正则表达式:

 if (preg_match('~^(Keyword1|Keyword2)/$~', $input, $matches)) 
Run Code Online (Sandbox Code Playgroud)

为什么正则表达式中出现警告?

'/(^Keyword1/$|^Keyword2/$)/'
Run Code Online (Sandbox Code Playgroud)

由于你使用的/是分隔符,/你的正则表达式中的第二个让PHP认为它是你的正则表达式的结束.现在PHP正则表达式接受像修饰符s,m,i结束分隔符之后.但在你的情况下,PHP $在结束分隔符后看到了一个.由于$不是有效的修饰符,您会收到警告:

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