Da Sie nur Zuordnung ausschließen oder senden Sie es leicht
negiert ist
while (<DATA>) { print if not /(?:=|return)\s+this\.execute/ }
__DATA__
this.execute();
var x = this.execute();
return this.execute();
Diese druckt nur die Linie this.execute();
.
Mit Lookaround Assertions, ein negative Vorschau, die Sie anbieten funktioniert
if (/^(?!.*=|return)\s+this\.execute/x) { print "$_\n" }
Was die negativen Lookbehind, gibt es ein Problem. Erstens ist hier, was
if (/(?<! =\s) this\.execute/x) { print "$_\n" }
if (/(?<! return \s) this\.execute/x) { print "$_\n" }
arbeitet Dies schließt =
oderreturn
, mit einem Raum. Die Sache ist, wir können \s+
dort nicht setzen, noch können wir Alternation machen - Perl kann es für diese bestimmte Behauptung nicht tun, sieh perlretut. Wir bekommen
Variable length lookbehind not implemented in regex m/(?<!=\s+)this\.execute/ at
wir hinzufügen können, Raum \s+
außerhalb der Behauptung, mit Gegen this...
und dann mehrere Bedingungen kombinieren für eine Möglichkeit zu schaffen, dass es keinen Raum zwischen =
und this...
ist.
Es gibt jedoch keinen Grund dafür, wenn Sie eine reguläre negierte Übereinstimmung verwenden können.
Der gemeldete Fehler kann nur über grundlegende Syntax sein. Es geht um den genauen Code, den Sie ausführen, nicht um die Regex.
1) '^ (?!. * = | Return). * Execute \ (\). *' Funktioniert in Perl 5.8+ einwandfrei. 2) "ungültiger Perl-Operator" ist kein von Perl ausgegebener Fehler (und wenn es so ist, klingt es nicht wie ein Fehler, den die Regex-Engine auslösen würde). Bitte geben Sie den tatsächlichen Code an, den Sie ausgeführt haben. – ikegami
Tipp: Das abschließende '. *' Ist nutzlos. – ikegami
Siehe ['Was soll ich tun, wenn jemand meine Frage beantwortet?]] (Http://stackoverflow.com/help/someone-answers) – zdim