{}ファイルから特定のテキストを抽出できるように、ネストされた角かっことをPerlの正規表現と一致させようとしています。これは私が現在持っているものです:
my @matches = $str =~ /\{(?:\{.*\}|[^\{])*\}|\w+/sg;
foreach (@matches) {
print "$_\n";
}
場合によっては、これは期待どおりに機能します。たとえば、次のよう$str = "abc {{xyz} abc} {xyz}"に取得した場合:
abc
{{xyz} abc}
{xyz}
予想通り。ただし、他の入力文字列の場合、期待どおりに機能しません。たとえば、の場合$str = "{abc} {{xyz}} abc"、出力は次のようになります。
{abc} {{xyz}}
abc
それは私が期待したものではありません。それぞれが括弧の点で独自にバランスが取れているので、私は別々の行になりたい{abc}と思っていたでしょう。{{xyz}}正規表現に問題はありますか?もしそうなら、私はそれをどのように修正しますか?