Ich habe den folgenden regulären Ausdruck für die Eliminierung von Leerzeichen, Tabulatoren und neuen Zeilen: [^ \n\t]
Ich möchte dies jedoch für bestimmte zusätzliche Zeichen wie >
und <
erweitern.
Ich habe versucht, [^ \n\t<>]
, das funktioniert jetzt gut, aber ich möchte den Ausdruck nicht übereinstimmen, wenn der <
oder >
eine \
vorangestellt ist.
Ich habe versucht, [^ \n\t[^\]<[^\]>]
, aber das hat nicht funktioniert.
Kann eine der folgenden Sequenzen in Ihrer Eingabe vorkommen?
\>
\\>
\\>
\
blank
\
tab
\
newline
...
Wenn ja, wie schlagen Sie vor, sie zu behandeln?
Wenn nicht, dann werden Lookback-Assertions mit einer Breite von null ausreichen, vorausgesetzt, dass Sie Ihren regulären Ausdruck verwenden Motor unterstützt es. Dies wird in jeder Engine der Fall sein, die reguläre Ausdrücke im Perl-Stil unterstützt (einschließlich Perls, PHP, etc.):
%Vor% Der obige Text entspricht allen nicht-maskierten Leerzeichen, Zeilenumbrüchen, Tabulatoren oder gewinkelten Klammern. Allgemeiner (mit \s
zur Angabe beliebiger Leerzeichen, einschließlich \r
):
Alternativ kann die komplementäre Notation verwendet werden, ohne dass eine Lookback-Anweisung mit einer Breite von null erforderlich ist (aber wohl weniger effizient):
%Vor% Sie können auch eine Variante des letzteren verwenden, um die Fälle \>
, \\>
, \\>
usw. auch bis zu einer endlichen Anzahl von vorhergehenden Backslashs zu behandeln, wie zum Beispiel:
Laut der grep man-Seite :
Ein Klammerausdruck ist eine Liste von Zeichen eingeschlossen von [und]. Es passt auf jedes einzelne Zeichen in diesem Liste; wenn das erste Zeichen des Liste ist das Caret ^ dann stimmt es überein ein beliebiges Zeichen, das nicht in der Liste enthalten ist.
Dies bedeutet, dass Sie keine Zeichenfolge wie \ & lt; oder \ & gt; nur einzelne Zeichen.
Es sei denn, Sie haben eine Version von grep mit Perl Regex-Unterstützung, dann können Sie Lookarounds wie eines der anderen erwähnten Poster verwenden. Nicht alle Versionen von grep haben diese Unterstützung.