1

私は正規表現の問題に困惑しています。私はそれらをプロジェクトに使用しており、完全に機能していますが、前向きな先読みで解決できると思われる状況に陥りましたが、私の試みは期待どおりの結果にはなりませんでした。

説明するために、以下の行を作成しました。その中で、最初の値には「This」と「thisThing」が含まれ、もう 1 つは「That」と「thatThing」が含まれます。最初の値は「This」または「That」のみです。 " そして 2 番目の値は任意の (\w*) パターンにすることができます。

adsf(49) asd k:38* K.This(jfkael dk&$% thisThing) and K.That($$$$ djaf aj_dfj^^ ^ thatThing);

これは次のようになると思いました:

K\.(This|That)  (????????????????)    (\w*)(?=\))

つまり、「K」の後にある「This」または「That」を見つけます。そして、")" の前の最初の単語を取得します。ただし、指定する方法がよくわかりません (「)」が見つかるまで先を見て、その背後にある単語がわかるまでバックトラックします。そのようなことは可能ですか?

4

2 に答える 2

3

欲張りでない数量詞を使用できます:

K\.(This|That).*?(\w*)\)

または:(閉じ括弧を一致の一部にしたくない場合)

K\.(This|That).*?(\w*)(?=\))

このようにして、This | Thatと単語の間のすべてに一致しますが、怠惰になります(適切な一致が見つかるとすぐに\w*それを使用し、フォローがない場合はバックトラックし)ます)

于 2012-06-13T19:58:10.510 に答える
2

どうですか:K\.(This|That)\(.*?(\w+)\)

これは、括弧の間の部分と貪欲に一致しませんが、閉じ括弧の前に単語文字だけが残っているとすぐに停止します。

于 2012-06-13T19:59:34.470 に答える