正規表現パターンの最後の一致をどのように一致させることができますか?例えばRegex、最後のペアに一致
、私は[XXX]を一致させることができる方法:X、XX、XXXはランダムに割り当てることができる
data[X][XX][XXX]
。
私はすでに否定先読み
\[.*?\](?!.*?\[.*?\])
を使用しようとしたが、[最後付き]最初は、正しい結果が得られないだろうか照合されます。
正規表現パターンの最後の一致をどのように一致させることができますか?例えばRegex、最後のペアに一致
、私は[XXX]を一致させることができる方法:X、XX、XXXはランダムに割り当てることができる
data[X][XX][XXX]
。
私はすでに否定先読み
\[.*?\](?!.*?\[.*?\])
を使用しようとしたが、[最後付き]最初は、正しい結果が得られないだろうか照合されます。
このような結果が得られる理由は、.
が[
と]
および改行文字以外の任意の文字と一致するためです。あなたは否定文字クラス[^][]
と怠惰なドットを置き換えることがあります。
\[[^][]*\](?!.*?\[[^][]*\])
は、正規表現の風味によってregex demo
を参照してください、あなたは文字クラスに[
と]
をエスケープする必要があるかもしれません(JS、]
に([^\][]
)、Java/ICUでは両方をエスケープする必要があります([^\]\[]
))。
あなたは簡単にするためにこれを試すことができます。
.*(\[.*\])
それは最後のoccurance件まで一致しますが、グループ1に[anything]
の最後の発生をキャプチャしますと、今後の
私は、このパターンを1つの条件の下で掘り下げたいと考えています。入力文字列は短いとわかっています。最後の '[...]'の任意の場所に長い入力があると、最初の '。*'はパフォーマンスの問題を引き起こす可能性があります。 –
もう一つの解決法は、あなたが '[...]'の中に ']'を持つことができる場合に便利です:['\ [[^ [] * \](?!。*?\ [[^ [] * \] ) '](https://regex101.com/r/EWVifZ/2)。また、複数行の入力がある場合は、 '。*?'を '[\ s \ S] *? 'に置き換えてください。 –