$ Titel kann eine Reihe von Titeln sein, die von Präsident, MD, COO, CEO, ... reichen
$ ersetzen kann (Aktionär), (Eigentümer) oder dergleichen sein.
Ich bekomme diesen Fehler immer wieder. Ich habe nach falsch ausbalanciertem '(', ')', keinem Würfel gesucht: (
%Vor%Wenn Sie mir sagen könnten, was die Regex macht, wäre das großartig. Streicht es diese Symbole? Danke Leute!
Wenn die Variable $ replace Regex-Metazeichen enthalten kann, sollten Sie sie in \Q...\E
Um Jeffrey Friedls Mastering Regular Expressions zu zitieren
Literal Textspanne Die Folge \ Q "Anführungszeichen" regex Metazeichen (dh, setzt einen Backslash vor ihnen) bis zum Ende der Zeichenfolge oder bis zu einer \ E Sequenz.
Wie bereits erwähnt, werden diese Interpunktionssymbole entfernt, gefolgt vom Inhalt von $ replace, dann von mehr Interpunktionssymbolen, und dass es fehlschlägt, weil $ replace selbst eine nicht passende Klammer enthält.
Aber ein paar andere allgemeine Regex-Sachen: Erstens, anstatt alles zusammen zu OR-en (und das ist nur um die Logik und das Tippen zu vereinfachen), würde ich sie in einer Zeichenklasse zusammenhalten. passender [\s^,\/;\|]
ist möglicherweise weniger fehleranfällig und fingerfreundlich.
Zweitens, verwenden Sie keine Gruppierung, Klammer eine Menge von ()
, es sei denn, Sie meinen es wirklich. Dadurch wird die erfasste Zeichenkette in Erfassungspuffer platziert und der Overhead in der Regex-Engine wird erhöht. Per perldoc perlre
:
WARNUNG: Sobald Perl sieht, dass Sie eines von $ & amp; , $ 'oder $' irgendwo im Programm, es muss sie für jede Musterübereinstimmung zur Verfügung stellen. Dies kann Ihr Programm erheblich verlangsamen. Perl verwendet den gleichen Mechanismus, um $ 1, $ 2 usw. zu produzieren, also zahlen Sie auch einen Preis für jedes Muster, das auffangende Klammern enthält. Quelle
Sie können das umgehen, indem Sie einfach ?:
zu den Klammern hinzufügen:
(?:[\s^,\/;\|])
Bearbeiten: Nicht, dass Sie nicht erfassende Gruppierungen in dieser Instanz benötigen, aber sie befinden sich bereits in der Originalregex.
Offenbar enthält Ihre Variable $replace
die Zeichenfolge Owner)
, nicht (Owner)
.
Ausgabe:
%Vor% %Vor%Ausgabe:
%Vor%