-1

いくつかのあいまいな状況では、「/^match/」のような正規表現は、「何か他のもの」である行に一致する正反対の方法で機能し、それを修正する唯一の方法は、正規表現全体を中かっこの中に入れることです... "/ ^(match)/」、どうしてこうなった?

4

2 に答える 2

2

ここでの単なる推測です...私が考えることができる唯一の例は、あなたが説明する動作を変更することです:

/^foo|bar/

/^(foo|bar)/

括弧を追加すると、この正規表現の意味が変わることに注意してください。2 番目は、文字列の先頭にある foo または bar に一致します。1 つ目は、文字列の先頭にある foo または文字列内の任意の場所にある bar に一致します。あなたが説明したように、これはいくつかの誤った一致を与えるかもしれません。

これらの括弧を忘れるのは簡単な間違いです...私も時々それをしました...赤面... ;)

今のところ他の例は思いつきませんが、括弧を追加することで意味が微妙に変わる場合は他にもあると思います。次回は、見つけた例を忘れずに保存して、ここに投稿してください。

于 2010-02-04T19:59:15.430 に答える
0

完全にランダムな推測ですが、それを使用していましたsplitか?

javascript(PHPについてはよくわかりません)で、次のように入力すると、次のようになります。

"matchabc".split(/^match/)

私は得る:

["", "abc"]

splitは一致を使用して文字列を分割するため、一致しない部分が取得されることに注意してください。

ただし、これを行うと:

"matchabc".split(/^(match)/)

私は得る:

["", "match", "abc"]

それは、括弧が私が分割しているものをキャプチャしているためです。これはあなたが説明している振る舞いに少し似ているように聞こえます-問題を説明する例を投稿するとわかりやすくなります(正規表現だけでなく、それをどのように使用しているか、そしてそれが作用している文字列)。

于 2010-02-04T20:23:26.023 に答える