价格排序网址的正则表达式


Regex for price sort url

我不擅长正则表达式,如果有人能解决这个问题,我将不胜感激......我对此有些困惑:

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. 价格-1
  2. 价格-10
  3. 价格-100

因此,所有三个表达式都将返回 true。您需要使用单词边界、字符串结尾、行尾或其他终止字符等内容终止匹配,以便获得唯一匹配。有关详细信息,请参阅有关锚点的 PHP 参考。