区切り記号間の正規表現の一致

区切り記号間の正規表現の一致

複数行を含むファイルがあります。次のパターンを含む行を探しています。

\[.*<.*>.*\]

つまり、<something>[]の間の行が必要です。例は次のとおりです。

Line with [ <matching>|<pattern>]
A line <that> does[not]<match>[]
But [this[<should>]be matched] too
[match [me] <buddy>]

<>の間に許可される唯一の文字は英数字と下線です。

上記の正規表現と怠惰なバージョンを試しましたが、うまくいかないようです。正しい正規表現は何ですか?

ベストアンサー1

[]ペアが常に一致し、交差しておらず、その[...]オプションをサポートしている<...>場合(PCREサポートでビルドするときにGNUが行うように)、次のことができます。grep-Pgrep

grep -P '>(?!((?:[^]]|\[(?1)\])*)$)'

つまり、>次を探しています。いいえその後、一致する[...]ペアだけが出ます。 PCREの再帰的一致メカニズムを使用してください(?1)

おすすめ記事