2

2 つの条件で正規表現を作成しようとしていますが、その 2 つの条件のうち少なくとも 1 つが true である必要がありますが、両方とも true にすることもできます。これは私の正規表現です:

\(?<=\]\s)(word1|word2)(?=\s\[)\

(?<=\]\s)orは(?=\s\[)true でなければなりませんが、両方とも true の場合もありますが、少なくとも 1 つです!

example:
] word1 - true
word1 [- true
] word1 [- true
word1 - false

一致は常に最初の結果でboになる必要があります(結果配列では、「output_array [0]は「word1」でなければなりません)。そのため| 、助けてくれてありがとうを使いたくないのです。

4

3 に答える 3

4

私が考えることができる唯一の比較的簡単な解決策は、単語リストをコピーして、それらを 2 つのオプションに分けることです。

((?<=\]\s)(word1|word2)|(word1|word2)(?=\s\[))

編集:代替は(\]\s)?(word1|word2)(?=(?(1)|\s\[)). これには、単語のリストを 1 つだけ挿入する必要があります。この後読みを削除し、グループに置き換えたことを覚えておいてください。これは、要件によっては、探しているものではない可能性があります。Jerry がリンクした regex101 ページを使用してテストしました: http://regex101.com/r/mB7vM2 (Jerry に感謝します)。

于 2013-05-31T12:19:17.160 に答える
3

大きなものを持っているのはどうorですか?

(?<=\]\s)(word1|word2)|(word1|word2)(?=\s\[)

ここでテスト済み。

編集:これは、word1またはword2同じ結果配列に返されます:

((?<=\]\s)(?:word1|word2)|(?:word1|word2)(?=\s\[))

そしてここで再テスト。

于 2013-05-31T12:19:38.823 に答える