0

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

echo (preg_match('/\/(price-100)/i','/index.php/search/price-100/')) ? 'Same' :'Not Same';

结果将是“相同”,但是当我更改为 price-10 或 price-1

echo (preg_match('/\/(price-10)/i','/index.php/search/price-100/')) ? 'Same' :'Not Same';

它也会导致“相同”...我认为正则表达式遗漏了..任何人都可以帮助我吗?非常感谢你!

最好的问候,哈里森

4

4 回答 4

1

使用 a\b作为单词边界。

echo (preg_match('/\/(price-10)\b/i','/index.php/search/price-100/')) ? 'Same' :'Not Same';
于 2012-05-17T04:51:59.840 回答
0

“price-100”以“price-10”开头,所以正则表达式匹配。如果您只想在 price-10 后面没有数字时匹配它,您需要更改表达式来表示。

这是一个选项:

'/\/(price-10)(?:$|\/)/'

这匹配“.../price-10”或“.../price-10/”,但如果在-10 之后出现除斜线以外的任何内容,则失败。如果这太严格了,你可以这样做:

'/\/(price-10)(?!\d)/'

只要-10之后没有其他数字,它将匹配。

于 2012-05-17T04:53:01.297 回答
0

(price-10) replace with (price-10?/) and try

于 2012-05-17T04:58:21.087 回答
0

You aren't terminating your regular expression. For example, the string "price-1" is found in:

  1. price-1
  2. price-10
  3. price-100

So all three expressions will return true. You need to terminate the match with something like a word boundary, end-of-string, end-of-line, or other terminating character in order to have a unique match. See the PHP reference on anchors for more information.

于 2012-05-17T05:01:16.890 回答