0

グループ化が一致したかどうかを証明する何らかの方法があるかどうかを知りたいです。たとえば、次の 2 つの文字列で達成したいことを見てみましょう。

string 1: "start magic someword anotherword test end"

string 2: "start test x y z end"

magicキーワードand test(両方) を含む文字列を取得したい。しかし、いくつかの問題があります:

  • magictest互いに連続していない可能性があります。例えば、start magic word1 test word2 end
  • magicおよびtestは、文字列内でその順序ではない場合があります。つまり、 forstart magic test endおよび for と一致する必要がありstart test magic endます。

これを処理するために、次の正規表現を使用しました。

start ((w1)*(w2)*\[^(end)])+end

... つまり:

  • 文字列は単語で始まり、startで終わる必要がありendます。
  • w1とを任意の順序で一致させ、 のおかげw2ではない他の単語を消費します。end[^(end)]
  • その後、試合終了。

その正規表現の問題は、実際の文字列と[^(end)]の間の単語を破棄する必要があるため、すべての文字列が一致することです。w1w2

文字列 1 に一致する正規表現を入れると、次のようになります。

start ((magic)*(test)*[^(end)])+end

...文字列1のみに一致する必要があります(これが私が欲しいものです)。ただし、文字列 2 も一致します。

グループ化が正規表現エンジンによって一致したかどうかを確認する方法はありますか? それとキーワードが遭遇したことを(if \1 != null)確認するようなものはありますか?ソースコードで処理できないため、正規表現で行う必要があります。コマンドラインで呼び出されるツールで動作することを意図しています。magictest

4

2 に答える 2

0

最後に、マーカーとしての start と end を削除し、** に置き換えました。今の表現は

"\*\* [^\*]*(w1|w2)[^\*]*(w1|w2)[^\*]* \*\*"

文字列を一致させる"** whatever w1|w2 whatever w1|w2 whatever **"

次のような文字列と一致しない"** whatever w1|w2 ** w1|w2 **"

@Denomales、どこから画像を入手したか教えてもらえますか? ありがとうございました

于 2013-06-22T01:23:18.757 に答える
0

説明

この式は次のようになります。

  • で始まる文字列とそれにstart続くスペースが必要です
  • 文字列がスペースで終わり、その後に続く必要がありますend
  • と の両方magictest任意の順序で含める必要があります
  • 少なくとも 1 つのスペースで囲まれている必要がありmagicますtest

^start(?=\s)(?=.*\smagic(?=\s))(?=.*\stest(?=\s)).*\send(\r|\n|\Z)

ここに画像の説明を入力

入力テキスト

start magic someword anotherword test end
start test x y z end
start the a magic show with Gob and Tony Wonder who will test till the end

**出力

[0] => start magic someword anotherword test end
[1] => start the a magic show with Gob and Tony Wonder who will test till the end
于 2013-06-21T16:35:23.957 に答える