我不擅长正则表达式,如果有人能解决这个问题,我将不胜感激......我对此有些困惑:
echo (preg_match('/'/(price-100)/i','/index.php/search/price-100/')) ? 'Same' :'Not Same';
结果为"相同",但是当我更改为价格-10 或价格-1 时
echo (preg_match('/'/(price-10)/i','/index.php/search/price-100/')) ? 'Same' :'Not Same';
它也会产生"相同"的结果...我认为在正则表达式上错过了。有人可以帮我吗?之前非常感谢你!
此致敬意Harrison
使用'b
表示单词边界。
echo (preg_match('/'/(price-10)'b/i','/index.php/search/price-100/')) ? 'Same' :'Not Same';
"price-100" 以 "price-10" 开头,因此正则表达式匹配。 如果您只想在 price-10 之后没有更多数字时匹配它,则需要更改表达式以表示。
这里有一个选项:
'/'/(price-10)(?:$|'/)/'
它匹配".../price-10"或".../price-10/",但如果 -10 之后出现斜杠以外的任何内容,则会失败。 如果限制太多,您可以执行以下操作:
'/'/(price-10)(?!'d)/'
只要 -10 之后没有另一个数字,它就会匹配。
(price-10)
替换为(price-10?/)
并尝试
您不会终止正则表达式。例如,字符串"price-1"位于:
- 价格-1
- 价格-10
- 价格-100
因此,所有三个表达式都将返回 true。您需要使用单词边界、字符串结尾、行尾或其他终止字符等内容终止匹配,以便获得唯一匹配。有关详细信息,请参阅有关锚点的 PHP 参考。