Wie kann ich mit Saiten, die nicht mit einem bestimmten Muster in Perl?

Ich weiß, es ist einfach zu passen, also alles außer einem bestimmten Charakter mit einem regulären Ausdruck.

$text = "ab ac ad";
$text =~ s/[^c]*//g; # Match anything, except c.

$text is now "c".

Ich weiß nicht, wie man "außer" Zeichenfolgen anstelle von Zeichen. Wie würde ich "match nichts, außer 'ac'" ? Versucht, [^- (ac)] und [^"ac"], ohne Erfolg.

Ist es überhaupt möglich?

Für einfache "string ist (nicht) enthalten, die in anderen Zeichenfolge" es ist besser, verwenden Sie einen index (gibt -1 zurück, wenn es nicht enthalten). Ich schrieb einen mailserver log-Datei-parser ein, die zuerst verwendet regexp für diejenigen, die einfach überprüft, nachdem ich umgestellt auf index () - es Laufzeit wurde reduziert um über 25% gegenüber dem regexp-version. Als bonus-index() ist leichter zu Lesen.
Was ist dein Ziel genau? (1) eine Zeichenfolge suchen, die nicht enthalten ac (oder eine andere sub-string) oder (2) alles ersetzen in einem string mit Ausnahme der sub-string ac (z.B. ändern abacadac in acac)? Ich vermute, es ist das letztere.
Hinzufügen @Bart ' s Kommentar: Bitte geben Sie exsamples: (1) die Zeichenfolge, die Sie wollen, zu überprüfen und zu entkräften, ODER (2) Zeichenfolge, die Sie möchten, zu extrahieren, aus diesem string ODER (3) das Ergebnis der Ersetzungen in diesem string.
Ich habe versucht, zu vereinfachen, das Beispiel, aber mein eigentliches Ziel war, zu reinigen, einige wiki-markup. Im Grunde entfernen Sie alle {{...}} nicht enthalten "}}" drin.
Ein einfaches Beispiel ist gut, aber stellen Sie sicher, dass Sie nicht übermäßig vereinfachen—Ihr Beispiel sollte noch sein Vertreter das problem, das Sie lösen wollen.

InformationsquelleAutor ssn | 2010-01-21

Schreibe einen Kommentar