2015-08-01 11 views
7

Wie kann man eine Regex schreiben, um alle Paare von Klammern zu entfernen, die nichts enthalten?PCRE Regex zum Entfernen von leeren Klammern

Zum Beispiel {} und {{}} sollte auf einen leeren String reduziert werden, aber {{} wird { und {{A}{}} wird {{A}}.

Ich laufe gerade s/\{\}//g in einer Schleife, bis die String-Länge fest ist, aber gibt es eine bessere Möglichkeit, dies zu tun?

+4

Passende ausgeglichene Paare ist eines der schwierigsten Probleme regulären Ausdruck. Zum Glück hat PCRE eine Erweiterung, um damit umzugehen. Diese Antwort könnte helfen. https://stackoverflow.com/questions/5410652/regex-delete-contents-of-square-brackets – Schwern

Antwort

10

Die Zuordnung ausgewogener Paare mit traditionellen regulären Ausdrücken ist schwierig, wenn nicht unmöglich. Glücklicherweise haben PCRE und andere eine Erweiterung, die rekursiv übereinstimmt, (?R) wird rekursiv dem gesamten Muster entsprechen.

Das sagt zu Klammerpaare, die Null oder mehr Klammerpaare in ihnen haben. Weitere Informationen finden Sie unter perlretut->Recursive patterns und perlre->Extended Patterns->?R.

2

ohne Rekursion:

1 while s/\{\}//g;