グループ化が一致したかどうかを証明する何らかの方法があるかどうかを知りたいです。たとえば、次の 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 endmagicおよび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
