0

私は正規表現が苦手です。誰かがこれについて私の問題を解決できれば非常に感謝しています...私はこれについて混乱しています:

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';

それも「同じ」という結果になります...正規表現に欠けていると思います..誰か助けてください。この前は本当にありがとう!

よろしく、ハリソン

4

4 に答える 4

1

\b単語境界には a を使用します。

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

正規表現を終了していません。たとえば、文字列「price-1」は次の場所にあります。

  1. 価格-1
  2. 価格-10
  3. 価格-100

したがって、3 つの式はすべて true を返します。一意の一致を得るには、単語境界、文字列の終わり、行末、またはその他の終了文字などで一致を終了する必要があります。詳細については、アンカーに関するPHP リファレンスを参照してください。

于 2012-05-17T05:01:16.890 に答える
0

「price-100」は「price-10」で始まるため、正規表現が一致します。price-10 の後に数字がない場合にのみ一致させたい場合は、そのように式を変更する必要があります。

1 つのオプションを次に示します。

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

これは ".../price-10" または ".../price-10/" のいずれかに一致しますが、-10 の後にスラッシュ以外が来ると失敗します。制限が厳しすぎる場合は、次のようにすることができます。

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

-10 の後に別の数字がない限り一致します。

于 2012-05-17T04:53:01.297 に答える
0

(price-10)に置き換えて(price-10?/)試してください

于 2012-05-17T04:58:21.087 に答える