2

かなりの量の調査を行った後、私はSOコミュニティウィキにたどり着きました。そこでは、正規表現で何かが一致しないかどうかを確認する最良の方法は、次のようなことを行うことであると言われました。

^((?!hede).)*$

それを例として使用して、feまたはFeの文字で始まらない括弧内のすべてに一致するものを取得しようとしました。私はこれを思いついた:

\(((?!fe|Fe).+?)\)

動作しますが、括弧を含むものと括弧を含まないものの2つの一致が得られているようです。誰かが私が間違っていることを指摘できますか?

4

2 に答える 2

4

それはあなたに2つのマッチを与えません。それはあなたに最初に捕らえられたグループとの完全な一致を与えるだけです。エスケープされていない括弧の外側のペアを削除するだけで、2番目の「一致」がなくなるはずです。

\((?!fe|Fe).+?\)

後でこれらの括弧が必要になったが、それが生成するキャプチャされたサブストリングが必要ない場合は、:を使用して括弧を非キャプチャにすることもできます?:

\((?:(?!fe|Fe).+?)\)

これら2つは同等ですが、後者は少し冗長です。

また、区切り文字で区切られたコンテンツを照合する場合は、一般に、貪欲でない繰り返しではなく、負の文字クラスを使用することをお勧めします。

\((?!fe|Fe)[^)]+\)

(これは同等である必要があります)

于 2012-10-28T16:54:21.190 に答える
1

最初の角かっこに「?:」を追加すると、キャプチャグループを削除できます。

于 2012-10-28T16:55:29.130 に答える