Perl reguläre Ausdrücke

Ein regulärer Ausdruck beschreibt ein Muster für den Zeichenkettenabgleich. Er kann verwendet werden, um zu prüfen, ob eine Zeichenkette eine bestimmte Teilzeichenkette enthält, die übereinstimmende Teilzeichenkette zu ersetzen oder Teilzeichenketten, die eine bestimmte Bedingung erfüllen, aus einer Zeichenkette zu extrahieren usw.

Perls Funktionalität für reguläre Ausdrücke ist sehr mächtig, im Grunde die mächtigste unter den gebräuchlichen Sprachen. Viele Sprachen beziehen sich bei der Entwicklung ihrer Unterstützung für reguläre Ausdrücke auf Perls reguläre Ausdrücke.

Perl hat drei Formen regulärer Ausdrücke: Mustervergleich, Ersetzung und Übersetzung:

  • Mustervergleich: m// (kann auch als / abgekürzt werden/, wobei m weggelassen wird)

  • Substitution: s///

  • Übersetzung: tr///

Diese drei Formen werden im Allgemeinen mit=~oder!~in Kombination verwendet. =~ bedeutet eine Übereinstimmung, !~ bedeutet keine Übereinstimmung.


Match-Operator

Der Match-Operator m// wird verwendet, um eine Zeichenketten-Anweisung oder einen regulären Ausdruck abzugleichen. Um beispielsweise "run" in der skalaren Variablen $bar abzugleichen, lautet der Code wie folgt:

Beispiel

#!/usr/bin/perl $bar = "Ich bin Beispielseite. Willkommen auf der Beispielseite."; if ($bar =~ /run/){ print "Erste Übereinstimmung\n"; }else{ print "Erste Nicht-Übereinstimmung\n"; } $bar = "run"; if ($bar =~ /run/){ print "Zweite Übereinstimmung\n"; }else{ print "Zweite Nicht-Übereinstimmung\n"; }

Das Ausführen des obigen Programms erzeugt die folgende Ausgabe:

First match
Second match

Mustervergleichsmodifikatoren

Es gibt einige häufig verwendete Modifikatoren für den Musterabgleich, wie in der folgenden Tabelle gezeigt:

ModifiziererBeschreibung
iGroß-/Kleinschreibung im Muster ignorieren
m Mehrzeilenmodus
oNur einmal zuweisen
sEinzeilenmodus, "." stimmt mit "\n" überein (stimmt standardmäßig nicht überein)
xLeerzeichen im Muster ignorieren
gGlobale Übereinstimmung
cgNach einem fehlgeschlagenen globalen Abgleich erlauben, erneut nach der übereinstimmenden Zeichenkette zu suchen

Variablen für reguläre Ausdrücke

Nach der Verarbeitung speichert Perl die übereinstimmenden Werte in drei speziellen Variablennamen:

  • $`: Die Zeichenkette vor dem übereinstimmenden Teil
  • $&: Die übereinstimmende Zeichenkette
  • $': Die verbleibende Zeichenkette, die nicht übereingestimmt hat

Wenn Sie diese drei Variablen zusammenfügen, erhalten Sie die ursprüngliche Zeichenkette.

Das Beispiel ist wie folgt:

Beispiel

#!/usr/bin/perl $string = "Willkommen auf der example-Seite."; $string =~ m/run/; print "Zeichenkette vor dem Treffer:$`\n"; print "Übereinstimmende Zeichenkette: $&\n"; print "Zeichenkette nach dem Treffer:$'\n";

Die Ausführung des obigen Programms liefert das folgende Ergebnis:

匹配前的字符串: welcome to 
匹配的字符串: run
匹配后的字符串: oob site.

Substitutionsoperator

Der Substitutionsoperator s/// ist eine Erweiterung des Match-Operators. Er verwendet eine neue Zeichenkette, um die angegebene Zeichenkette zu ersetzen. Das grundlegende Format ist wie folgt:

s/PATTERN/REPLACEMENT/;

PATTERN ist das Suchmuster, REPLACEMENT ist die Ersetzungszeichenkette.

Zum Beispiel ersetzen wir "google" durch "example" in der folgenden Zeichenkette:

Beispiel

#!/usr/bin/perl $string = "Willkommen auf der google-Seite."; $string =~ s/google/example/; print "$string\n";

Die Ausführung des obigen Programms liefert das folgende Ergebnis:

welcome to example site.

Modifikatoren der Substitutionsoperation

Die Modifikatoren der Substitutionsoperation sind in der folgenden Tabelle aufgeführt:

ModifiziererBeschreibung
iWenn "i" zum Modifikator hinzugefügt wird, wird die Groß-/Kleinschreibung im regulären Ausdruck nicht mehr berücksichtigt, das heißt, "a" und "A" sind gleich.
mStandardmäßig gelten der Anfang "^" und das Ende "$" des regulären Ausdrucks nur für die gesamte Zeichenkette. Wenn "m" zum Modifikator hinzugefügt wird, beziehen sich Anfang und Ende auf jede Zeile der Zeichenkette: der Anfang jeder Zeile ist "^", und das Ende ist "$".
oDer Ausdruck wird nur einmal ausgeführt.
sWenn "s" zum Modifikator hinzugefügt wird, dann wird das standardmäßige ".", das jedes Zeichen außer Zeilenumbruch repräsentiert, zu jedem Zeichen, einschließlich Zeilenumbruch!
xWenn dieser Modifikator hinzugefügt wird, werden Whitespace-Zeichen im Ausdruck ignoriert, es sei denn, sie wurden escaped.
gAlle übereinstimmenden Zeichenketten ersetzen.
eDie Ersetzungszeichenkette als Ausdruck behandeln.

Übersetzungsoperator

Die folgenden sind die Modifikatoren, die sich auf den Übersetzungsoperator beziehen:

ModifiziererBeschreibung
cAlle nicht angegebenen Zeichen übersetzen
dAlle angegebenen Zeichen löschen
sMehrere identische Ausgabezeichen zu einem zusammenfassen

Das folgende Beispiel wandelt alle Kleinbuchstaben in der Variablen $string in Großbuchstaben um:

Beispiel

#!/usr/bin/perl $string = 'Willkommen auf der example-Seite.'; $string =~ tr/a-z/A-Z/; print "$string\n";

Die Ausführung des obigen Programms liefert das folgende Ergebnis:

WELCOME TO EXAMPLE SITE.

Das folgende Beispiel verwendet /s, um wiederholte Zeichen in der Variablen $string zu löschen:

Beispiel

#!/usr/bin/perl $string = 'example'; $string =~ tr/a-z/a-z/s; print "$string\n";

Die Ausführung des obigen Programms liefert das folgende Ergebnis:

runob

Weitere Beispiele:

$string =~ tr/\d/ /c;     # 把所有非数字字符替换为空格
$string =~ tr/\t //d;     # 删除tab和空格
$string =~ tr/0-9/ /cs    # 把数字间的其它字符替换为一个空格。

Weitere Regeln für reguläre Ausdrücke

Ausdruck Beschreibung
. Entspricht jedem Zeichen außer Zeilenumbruch
x? Entspricht 0 oder 1 Vorkommen des x-Strings
x* Entspricht 0 oder mehr Vorkommen des x-Strings, entspricht aber so wenigen wie möglich
x+ Entspricht 1 oder mehr Vorkommen des x-Strings, entspricht aber so wenigen wie möglich
.* Entspricht 0 oder mehr Vorkommen eines beliebigen Zeichens
.+ Entspricht 1 oder mehr Vorkommen eines beliebigen Zeichens
{m} Entspricht genau m Vorkommen der angegebenen Zeichenfolge
{m,n}Entspricht zwischen m und n Vorkommen der angegebenen Zeichenfolge
{m,} Entspricht m oder mehr Vorkommen der angegebenen Zeichenfolge
[] Entspricht Zeichen innerhalb von []
[^]Entspricht Zeichen, die nicht innerhalb von [] liegen
[0-9]Entspricht allen Ziffern
[a-z] Entspricht allen Kleinbuchstaben
[^0-9] Entspricht allen Nicht-Ziffern-Zeichen
[^a-z]Entspricht allen Zeichen, die keine Kleinbuchstaben sind
^ Entspricht dem Anfang einer Zeichenfolge
$Entspricht dem Ende einer Zeichenkette
\d Entspricht einem Ziffernzeichen, gleiche Syntax wie [0-9]
\d+ Entspricht einem oder mehreren Ziffernzeichen, gleiche Syntax wie [0-9]+
\D Nicht-Ziffer, ansonsten wie \d
\D+ Nicht-Ziffer, ansonsten wie \d+
\w Eine Zeichenkette aus englischen Buchstaben oder Ziffern, gleiche Syntax wie [a-zA-Z0-9_]
\w+ Gleiche Syntax wie [a-zA-Z0-9_]+
\W Eine Zeichenkette aus nicht-englischen Buchstaben oder Nicht-Ziffern, gleiche Syntax wie [^a-zA-Z0-9_]
\W+ Gleiche Syntax wie [^a-zA-Z0-9_]+
\s Leerraum, gleiche Syntax wie [\n\t\r\f]
\s+ Dasselbe wie [\n\t\r\f]+
\S Nicht-Leerraum, gleiche Syntax wie [^\n\t\r\f]
\S+ Gleiche Syntax wie [^\n\t\r\f]+
\b Findet Zeichenketten mit englischen Buchstaben oder Ziffern als Grenzen
\B Findet Zeichenketten, die nicht durch englische Buchstaben oder Ziffern begrenzt sind
a|b|c Findet eine Zeichenkette, die auf das Zeichen a, b oder c passt
abcFindet eine Zeichenkette, die abc enthält. (pattern) () Dieses Symbol merkt sich die gefundene Zeichenkette; es ist eine sehr praktische Syntax. Die im ersten () gefundene Zeichenkette wird zur Variable $1 oder \1, die im zweiten () gefundene Zeichenkette wird zur Variable $2 oder \2, und so weiter.
/pattern/i Der Parameter i bedeutet, die englische Groß-/Kleinschreibung zu ignorieren, das heißt, beim Abgleichen von Zeichenketten wird die englische Groß-/Kleinschreibung nicht berücksichtigt. \ Wenn Sie ein Sonderzeichen im Muster finden müssen, wie "*", fügen Sie ein \ Symbol vor diesem Zeichen hinzu, damit das Sonderzeichen seine Wirkung verliert.

Weitere Referenzen

Reguläre Ausdrücke:https://www.example.com/regexp/regexp-tutorial.html

Perl-reguläre Ausdrücke:https://perldoc.perl.org/perlre#Regular-Expressions

Andere Erweiterungen