グループ化が一致したかどうかを証明する何らかの方法があるかどうかを知りたいです。たとえば、次の 2 つの文字列で達成したいことを見てみましょう。
string 1: "start magic someword anotherword test end"
string 2: "start test x y z end"
magic
キーワードand test
(両方) を含む文字列を取得したい。しかし、いくつかの問題があります:
magic
test
互いに連続していない可能性があります。例えば、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)]
の間の単語を破棄する必要があるため、すべての文字列が一致することです。w1
w2
文字列 1 に一致する正規表現を入れると、次のようになります。
start ((magic)*(test)*[^(end)])+end
...文字列1のみに一致する必要があります(これが私が欲しいものです)。ただし、文字列 2 も一致します。
グループ化が正規表現エンジンによって一致したかどうかを確認する方法はありますか? それとキーワードが遭遇したことを(if \1 != null)
確認するようなものはありますか?ソースコードで処理できないため、正規表現で行う必要があります。コマンドラインで呼び出されるツールで動作することを意図しています。magic
test