我使用在线正则表达式测试程序来构建一个简单的正则表达式,但是使用php的preg_match它为$提供了一个未知的修饰符.
这是正则表达式:
if (preg_match('/(^Keyword1/$|^Keyword2/$)/', $input, $matches))
Run Code Online (Sandbox Code Playgroud)
我要做的是检查$ input是否等于Keyword1 /或Keyword2 /(完全匹配).我知道我可以使用"if($ input =='Keyword1 /')轻松完成此操作"但是我宁愿在代码中使用几行正则表达式和十几个if语句.
有人帮帮我吗?
你需要逃避/正则表达式内部,因为/它也被用作分隔符:
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 ...
| 归档时间: |
|
| 查看次数: |
10618 次 |
| 最近记录: |