Próbuję dopasować nawiasy zagnieżdżone z wyrażeń regularnych w Perlu, aby móc wyodrębnić określone fragmenty tekstu z pliku. To jest to, co mam obecnie:Wyrażenie regularne Perl: dopasuj zagnieżdżone nawiasy
my @matches = $str =~ /\{(?:\{.*\}|[^\{])*\}|\w+/sg;
foreach (@matches) {
print "$_\n";
}
W pewnych okresach To działa zgodnie z oczekiwaniami. Na przykład, jeśli otrzymam: $str = "abc {{xyz} abc} {xyz}"
, otrzymam:
abc {{xyz} abc} {xyz}
zgodnie z oczekiwaniami. Ale w przypadku innych ciągów wejściowych nie działa zgodnie z oczekiwaniami. Na przykład, jeśli $str = "{abc} {{xyz}} abc"
, wyjście to:
{abc} {{xyz}} abc
co nie jest tym, czego się spodziewałem. Chciałbym, aby {abc}
i {{xyz}}
były w osobnych liniach, ponieważ każda z nich jest równoważona sama w sobie w nawiasach. Czy jest jakiś problem z moim regularnym wyrażeniem? Jeśli tak, jak mam to naprawić?
wierzę [uprzedzona] (http://www.regular-expressions.info/lookaround.html) mógłby pomóc –