Krippe auf PERL regulären Ausdrücken
Kapitel 6.4. Reguläre Ausdrücke
6.4.1. Syntax für reguläre Ausdrücke
Reguläre Ausdrücke sind Muster für bestimmte Kombinationen von Symbolen in Textzeichenfolgen zu suchen und sie mit anderen Kombinationen von Zeichen ersetzen (diese Operationen werden die Pattern - Matching und Substitution genannt). Der reguläre Ausdruck in Sprache PERL Aussehen
/ Muster / Modifikatoren
Hier Muster - eine Zeichenfolge , die einen regulären Ausdruck angibt, und Modifikatoren - optional Ein-Buchstaben - Modifikatoren , Regeln für die Verwendung von regulären Ausdrücken angeben.
Ein regulärer Ausdruck kann aus gewöhnlichen Zeichen bestehen; in diesem Fall wird die vorbestimmte Kombination von Zeichen in der Zeichenkette entsprechen. Zum Beispiel entspricht der Ausdruck / cat / den ausgewählten Teil in den folgenden Zeilen: "Cat App", "für die Katze", "Katze in ihm." Allerdings gibt die wahre Macht von regulären Ausdrücken Perl intern die Möglichkeit , ihre speziellen Meta - Zeichen zu verwenden.
Symbol | Beschreibung |
---|---|
\ | Für Zeichen, die in der Regel buchstäblich behandelt werden, zeigt an, dass das nächste Zeichen ein Metazeichen ist. Zum Beispiel, / n / der Buchstabe n und / \ n / entspricht eine neue Zeile. Für die Meta-Zeichen bedeutet, dass das Zeichen wörtlich genommen werden sollte. Zum Beispiel / ^ / bedeutet den Anfang der Zeichenfolge und / \ ^ / ^ entspricht einem Zeichen. / \\ / Spiele Backslash \. |
^ | Passen Sie den Anfang der Zeile (Mi Modifikator m ). |
$ | Match das Ende der Zeile (Mi Modifikator m ). |
. | Es passt zu jedem Zeichen außer einem Zeilenumbruch (Mi Modifikator s ). |
* | Entspricht der vorherigen Symbol Null oder mehrmals zu wiederholen. |
+ | Erfüllt eine Wiederholung des vorherigen Zeichens einmal oder mehrmals. |
? | Entspricht der vorherigen Symbol Null oder eine Zeit zu durchlaufen. |
(Pattern) | Erfüllt Linienmuster und erinnert sich an das Spiel es findet . |
x | y | Matches entweder x oder y. |
{N} | n - eine nicht negative ganze Zahl ist . Entspricht genau n Vorkommen des vorhergehenden Zeichens. |
{N,} | n - eine nicht negative ganze Zahl ist . Spiele n oder mehr Vorkommen des vorherigen Zeichens. / X {1} / Äquivalent / x + /. / X {0} / Äquivalent / x * /. |
{N, m} | n und m - negative Zahlen. Er entspricht nicht kleiner als n und höchstens m Vorkommen des vorherigen Zeichens. / X {0,1} / Äquivalent / x /?. |
[Xyz] | Es findet jedes Zeichen in der klammert. |
[^ Xyz] | Es passt zu jedem Zeichen außer Belichtungsreihen. |
[A - Z] | Entspricht einem beliebigen Zeichen im angegebenen Bereich. |
[^ A - z] | Es passt zu jedem Zeichen außer liegen innerhalb des angegebenen Bereichs. |
\ a | Spiele eine Glocke (BEL). |
\ A | Er passt nur den Anfang der Zeile, auch mit dem Modifikator m . |
\ b | Spiele eine Wortgrenze, dh. E. Position zwischen \ w und \ W in beliebiger Reihenfolge. |
\ B | Entspricht einer beliebigen anderen Position als einer Wortgrenze. |
\ Mit X | Spiele das Zeichen Strg + X. Zum Beispiel / \ cI / Äquivalent / \ t /. |
\ C | Erfüllt ein Byte, auch wenn die Anwendung UTF - 8 - Richtlinie. |
\ d | Die entsprechenden Zahlen. Entspricht [0-9]. |
\ D | Entspricht nicht numerischen Zeichen. Entspricht [^ 0-9]. |
\ e | Entspricht der Escape-Zeichen (ESC). |
\ E | Ende der Transformationen \ L, \ Q \ U . |
\ f | Entspricht dem Zeichen Übertragungsformat (FF). |
\ G | Es entspricht der Position in der Zeichenfolge gleich pos (). |
\ l | Wandelt das nächste Zeichen in Kleinbuchstaben. |
\ L | Wandelt Zeichen bis \ E. in Kleinbuchstaben |
\ n | Entspricht Zeilenumbrüche. |
\ P Eigenschaft | Entsprechende Unicode - Zeichen, mit der Eigenschaft Eigenschaft. Wenn die Eigenschaft mehrere Zeichen gesetzt ist, verwenden Sie die Syntax \ p {Eigenschaft}. |
\ P Eigenschaft | Entsprechende Unicode - Zeichen, nicht Eigentum Eigentum. Wenn die Eigenschaft mehrere Zeichen gesetzt ist, verwenden Sie die Syntax \ P {Eigenschaft}. |
\ Q | Fügt ein Zeichen "\" vor Metazeichen E. zu \ |
\ r | Spiele einen Wagenrücklauf (CR). |
\ s | Es entspricht dem Zeichen Raum. Equivalent / [\ f \ n \ r \ t] /. |
\ S | Entspricht einem beliebigen Nicht-Leerzeichen. Equivalent / [^ \ f \ n \ r \ t] /. |
\ t | Spiele ein Tab-Zeichen (HT). |
\ u | Wandelt das nächste Zeichen in Großbuchstaben. |
\ U | Wandelt Zeichen bis \ E. in Großbuchstaben |
\ w | Entspricht Buchstaben, Zahlen oder Unterstrich. Äquivalent / [A-Za-z0-9_] /. |
\ W | Es passt zu jedem Zeichen außer Buchstaben, Zahlen oder Unterstrichen. Äquivalent / [^ A-Za-z0-9_] /. |
\ X | Spiele den Unicode-Zeichenfolge der Hauptfigur und eine Reihe von Icons Akzent. Equivalent Ausdruck / C <(:? \ PM \ pM *)> /. |
\ z | Ende der Linie entspricht nur noch mit dem Modifikator m . |
\ Z | Er passt nur das Ende eines Strings oder Zeilenumbrüche am Ende der Zeile, auch mit dem Modifikator m . |
\ n | n - positive Zahl. Spiele n -s gespeichert substring . Wenn Klammern Zeichen links vor weniger als n, und n> 9, dann ist das Äquivalent \ 0 n. |
\ N 0 | n - Oktalzahl, nicht größer als 377. Spiele der Charakter mit Oktalcode n. Zum Beispiel / \ 011 / Äquivalent / \ t /. |
\ X n | n - Hex - Zahl, bestehend aus zwei Ziffern. Entspricht dem Zeichen mit Hex - Code n. Zum Beispiel / \ x31 / Äquivalent / 1 /. |
\ X {n} | n - Hex - Zahl aus vier Ziffern besteht. Entsprechende Unicode - Zeichen mit Hex - Code n. Zum Beispiel / \ x {2663} / Äquivalent / ♣ /. |
6.4.2. Modifikatoren
Verschiedene Operationen mit regulären Ausdrücken verwenden unterschiedliche Modifikatoren, um die Operation zu verfeinern. Jedoch vier Modifikator haben ein gemeinsames Ziel.
- ich
- Er ignoriert den Fall von Zeichen in Pattern-Matching. Bei Verwendung locale - Direktive die Zeichen ein Register zu bringen , ist im Hinblick auf die nationalen Setup vorgenommen.
- m
- Prüft die ursprüngliche Zeichenfolge als Puffer von ein paar Textzeilen durch Zeilenumbrüche getrennt. Das bedeutet , dass Metasymbole ^ und nur $ nicht zu Beginn und am Ende der gesamten Linie entsprechen, aber der Beginn und das Ende einer Textzeile durch Zeilenumbrüche begrenzt.
- s
- Es behandelt die Quellzeichenfolge als eine einzelne Textzeile, ohne auf Pausen. Das bedeutet , dass die Platzhalter. jedes Zeichen, Zeilenumbruch einschließlich.
- x
- Es ermöglicht die Verwendung von Leerzeichen und Kommentare. Lücken , die keine vorhergehende Zeichen \ oder eingeschlossen in [] haben , werden ignoriert. Das Symbol # beginnt einen Kommentar, der ignoriert wird.
6.4.3. Klassen Unicode und POSIX - Zeichen
Wir können die Syntax von regulären Ausdrücken
[: Klasse:]
wo Klasse den Namen der POSIX - Zeichenklasse gibt, t. e. Mobilfunkstandard in C. Wenn Sie Richtlinien UTF8 anstelle der Zeichenklassen POSIX verwenden, können Sie Unicode - Zeichenklassen im Design
\ P {Klasse}
Die folgende Tabelle fasst alle POSIX-Zeichenklassen, die entsprechenden Unicode-Zeichenklassen und Meta-Zeichen, wenn sie vorhanden sind.
POSIX | Unicode | metacharacter | Beschreibung |
---|---|---|---|
alpha | IsAlpha | Buchstaben | |
alnum | isalnum | Buchstaben und Zahlen | |
ASCII | isascii | ASCII-Zeichen | |
CNTRL | iscntrl | Steuerzeichen | |
Ziffer | IsDigit | \ d | Figuren |
graph | isgraph | Buchstaben, Zahlen und Satzzeichen | |
niedriger | islower | Kleinbuchstaben | |
isprint | Buchstaben, Zahlen, Satzzeichen und die Lücke | ||
punct | ispunct | Zeichensetzung | |
Raum | isspace | \ s | Leerzeichen |
obere | isupper | Großbuchstaben | |
Wort | IsWord | \ w | Buchstaben, Zahlen und Unterstrichen |
xdigit | isxdigit | Die hexadezimalen Ziffern |
Zum Beispiel kann die Dezimalzahl eine der folgenden drei Arten festgelegt werden:
/ \ D + / / [: Digit:] + / / \ P {IsDigit} + / # Verwendung utf8
Um anzuzeigen, dass das Zeichen in einer bestimmten Klasse Struktur gehört verwendet
[: ^ Klasse:] \ P {Klasse}
Zum Beispiel haben die folgenden Ausdrücke die gleiche Bedeutung haben:
[: ^ Digit:] \ D \ P {IsDigit} [: ^ Raum:] \ S \ P {isspace} [: ^ Wort:] \ W \ P {IsWord}
6.4.4. Erinnern Teilzeichenfolge
Die Verwendung von Klammern in einem regulären Ausdruck führt zu der Tatsache, dass die Teilkette auf dem Muster in den Klammern entspricht, die in einem speziellen Puffer gespeichert ist. Für den Zugriff auf die gespeicherten n -s String innerhalb eines regulären Ausdrucks ist Design \ n verwendet, aber es ist - $ n, wobei n jedoch einen beliebigen Wert , beginnend mit 1. nehmen kann, sollte daran erinnert werden , dass die Verwendung von Perlausdrücken \ 10 \ 11 usw. d . . als Synonyme für den oktal - Zeichencode \ 010 \ 011 und so weiter. d. die Mehrdeutigkeit erlaubt ist so. Symbol \ 10 wird als ein Appell an die 10-ten gespeicherten String zu sein, wenn vor ihm in einem regulären Ausdruck ist nicht weniger als zehn linke Klammern; andernfalls ist dieses Zeichen mit Oktalcode 10. Metazeichen \ 1 ... \ 9 werden die Anrufe immer auf die gespeicherte Zeichenfolge berücksichtigt. Beispiele:
if (/(.)\1/) {# Look für den ersten wiederkehrenden Charakter print " '$ 1' - das erste wiederkehrender Charakter \ n"; } if (/ Zeit: (..)..)
..) /) {# Extract Zeitkomponenten $ Stunden = $ 1; $ Minuten = $ 2; $ Sekunden = $ 3; }
Zusätzlich zu den Variablen $ 1, $ 2, ... gibt es einige spezielle Variablen, in dem das Ergebnis der letzten Operation mit einem regulären Ausdruck, wie folgt:
Variable | Beschreibung |
---|---|
$ & | Zuletzt abgestimmt String. |
$ ` | Die Teil vor dem letzten angepasst Teilzeichenfolge. |
$ ' | Die Teil nach dem letzten Teilkette. |
$ + | Zuletzt gespeichert String. |
Hier ist ein Beispiel:
'AAA111BBB222' = ~ / (\ d +) /; print "$` \ n "; # AAA print "$ & \ n"; # 111 print "$" \ n "; # BBB222 print "$ + \ n"; # 111
Alle diese speziellen Variablen beibehalten, bis zum Ende des umschließenden Blocks oder bis zum nächsten erfolgreichen Mustervergleich ihre Werte.
6.4.5. Erweiterte Proben
PERL enthält mehrere zusätzliche Strukturen, die in regulären Ausdrücken für ihre Befähigung verwendet werden können. Alle diese Entwürfe sind in Klammern und beginnen mit? Das unterscheidet sie von Speicherstring.
- (? # Text)
- Kommentar. Die gesamte Struktur wird ignoriert.
- (? Modifikatoren - Modifikatoren)
- Es aktiviert oder deaktiviert die angegebenen Modifikatoren . Modifikatoren, stehend auf das Symbol oben - enthalten sind, nach ihm stand - ab. Beispiel:
if (/ aaa /) {...} # Vergleich Groß- und Kleinschreibung if (/ (? i) aaa /) {...} # Vergleich unempfindlich
- (?: Muster)
- (? Modifikatoren - Modifikatoren: Muster)
-
Hier können Sie Gruppenunterausdrücke von regulären Ausdrücken, ohne Treffer auswendig zu lernen. Die zweite Form ist zusätzlich aktiviert oder deaktiviert die angegebenen Modifikatoren . Zum Beispiel kann der Ausdruck
/ко(?:т|шка)/
- Ein Kürzel/кот|кошка/
. - (? = Pattern)
- Die Einhaltung der voraussah, ohne Treffer auswendig zu lernen. Zum Beispiel kann der Ausdruck
/Windows (?=95|98|NT|2000)/
entspricht "Windows" in line "Windows 98", aber in der Zeile "Windows 3.1" stimmt nicht überein. Nach der Suche passende weiter von der Position nächstes nach gefunden Korrespondenz stammend, ohne voraussehend. - (?! Pattern)
- Die Nichteinhaltung voraussehend, ohne Treffer auswendig zu lernen. Zum Beispiel kann der Ausdruck
/Windows (?!95|98|NT|2000)/
entspricht in der Zeile "Windows" "Windows 3.1", sondern in einer Reihe " , die Windows 98" stimmt nicht überein. Nach der Suche passende weiter von der Position nächstes nach gefunden Korrespondenz stammend, ohne voraussehend. - (? <= Pattern)
- Die Einhaltung guckt zurück, ohne von Treffer auswendig zu lernen. Zum Beispiel kann der Ausdruck
/(?<=\t)\w+/
\ w + / entspricht einem Wort, das die Tab - Zeichen und das Tab - Zeichen in $ ist nicht inbegriffen folgt &. Fragment entsprechenden lugt wieder sollte eine feste Breite haben. - (? <! Pattern)
- Die Nichteinhaltung zurück guckt, ohne Treffer auswendig zu lernen. Zum Beispiel kann der Ausdruck
/(?<!\t)\w+/
\ w + / entspricht dem Wort vor dem sich ein Tab - Zeichen ist. Fragment entsprechenden lugt wieder sollte eine feste Breite haben.
6.4.6. Regular Expression Operationen
Bis jetzt haben wir die regulären Ausdrücke in den Zeichen // abgeschlossen. In der Tat, Begrenzungszeichen werden durch einen regulären Ausdruck definiert q-Operation , die wir für sie gelten. Dieser Abschnitt beschreibt ausführlich alle Vorgänge Sprache mit regulären Ausdrücken PERL.
6.4.6.1. pattern Matching
Syntax: / Muster / Modifikatoren m / Muster / Modifikatoren
Dieser Vorgang vergleicht die angegebene Zeichenfolge mit dem Probenmuster und gibt wahr oder falsch auf dem Ergebnis des Vergleichs abhängig. Vergleichbar ist die Zeichenfolge , die von der linken Operand = gegeben ~ oder ~, zum Beispiel:
$ MyNumber = '12345'; if ($ mynumber = ~ / ^ \ d + $ /) {#, wenn die Zeichenfolge $ mynumber der Dezimalstellen besteht, dann ... ... }
Wenn die Zeichenfolge nicht angegeben ist, wird der Vergleich mit dem Inhalt der speziellen Variablen $ _ hergestellt. Insbesondere kann das obige Beispiel wie folgt umgeschrieben werden:
$ _ = '12345'; if (/ ^ \ d + $ /) { ... }
Zusätzlich zu dem Standard, kann es die folgenden Modifikatoren verwendet werden:
Modifikator | Beschreibung |
---|---|
c | Reset Suchposition nicht auf Versagen Vergleich (nur Modifikator g). |
g | Globale Mapping, t. E. Suchen nach allen Vorkommen der Probe. |
o | Kompilieren Sie einen regulären Ausdruck nur einmal. |
Wenn der reguläre Ausdruck in // enthalten ist, dann ist die anfängliche m ist optional. Das Design mit dem Anfangs m kann verwendet werden , als ein regulärer Ausdruck alle Zeichen in den q-Operationen erlaubt Begrenzer. Nützliche Sonderfälle:
- Wenn Trennzeichen die Zeichen '', dann ist die Interpolation Linienmuster sind nicht durchgeführt. In anderen Fällen gibt es eine Probe Interpolation und wenn es Variablen enthält, dann für jeden Vergleich gemacht seiner Kompilierung. Um dies zu vermeiden, verwenden Sie den Modifikator o (natürlich nur , wenn Sie sicher sind , dass die Werte der Variablen in die Stichprobe einbezogen bleiben unverändert).
- Wenn Trennzeichen sind die Zeichen ?? Dann gilt nur eine Regel des Vergleichs .
Wenn Muster eine leere Zeichenfolge ist, stattdessen verwendet es die letzte Ausdruck regelmäßig erfolgreichen Spiel.
Wenn kein Modifikator g und das Vergleichsergebnis wird der Liste zugeordnet ist , wird der gescheiterte Vergleich gibt eine leere Liste. Successful Vergleichsergebnis abhängig von der Anwesenheit von Klammern in der Probe. Wenn nicht, es gibt eine Liste von (1). Andernfalls gibt es eine Liste der Werte der Variablen aus $ 1, $ 2 und so weiter. E., T. E. Eine Liste aller gespeicherten Strings zurück. Das folgende Beispiel
($ W1, $ w2, $ Rest) = ($ x = ~ /^(\S+)\s+(\S+)\s*(.*)/);
in der Variablen $ Linie das erste Wort w1 x $, Variable $ w2 seinem zweiten Wort gespeichert ist , und die Variable $ Rest - der Rest des Strings.
G Modifikator umfassen globale Zuordnungsmodus mit der Probe, dh. E. in Folge alle Spiele Suche. Sein Verhalten hängt vom Kontext ab. Wenn das Vergleichsergebnis der Liste zugewiesen wird, gibt es eine Liste aller gespeicherten Strings zurück. Wenn die Probe keine Klammern enthält, gibt es eine Liste aller zu dem Muster, als ob es vollständig in Klammern eingeschlossen wurde. Das folgende Beispiel
$ _ = "00.23.45"; @result = / \ d + / g; foreach $ Elem (@result) { print "$ Elem \ n"; }
Displays Linien 12, 23 und 45.
In einem skalaren Kontext ein Vergleich mit dem g Modifikator suchen jedes Mal für das folgende Pattern - Matching und gibt wahr oder falsch auf das Suchergebnis abhängig. Position in der Zeile nach dem letzten Spiel gelesen werden kann oder veränderte Funktion pos (). Erfolglose Suchanfragen werden in der Regel setzt die Suchposition auf Null, aber wir können dies vermeiden , indem Sie den Modifikator c Zugabe. Zeilenwechsel wird auch die Suchposition in ihm.
Weitere Features Wildcard \ G angeboten, die Sinn nur in Verbindung mit dem Modifikator g macht. Diese Wildcard entspricht der aktuellen Position in der Suchleiste. Mit Designs m / \ G ... / gc praktisch, vor allem für das Schreiben von lexikalischen Analysatoren , die verschiedene Aktionen durchführen , für die in den analysierten Text Token erfüllt. Das folgende Beispiel
$ _ = 'Word1, word2 und 12345.'; LOOP: { print ( "number"), Redo-LOOP wenn /\G\d+\b[,.;]?\s*/gc; print ( "Wort"), Redo-LOOP wenn /\G[A-Za-z0-9]+\b[,.;]?\s*/gc; print ( "unbekannt"), Redo-LOOP if / \ G [^ A-Za-z0-9] + / gc; }
zeigt ein Wort Wortnummer Zeichenfolge Wort.
6.4.6.2. Das einzige , Pattern - Matching
Die Syntax ist :? Muster? m? Muster?
Dieser Entwurf ist völlig ähnlich dem von m / Muster / mit dem einzigen Unterschied: die erfolgreiche Musterabgleich nur einmal durchgeführt wird , zwischen Funktion ruft die reset () . Dies ist nützlich, beispielsweise, wenn man nur das erste Auftreten der Probe in jeder Datei aus einer Reihe von Anzeigen, beispielsweise zu finden müssen:
while (<>) { if (? ^ $?) { # ... Verarbeiten Sie die erste leere Zeile der Datei } } Weiter { zurückgesetzt, wenn EOF; # Status zurücksetzen ?? zur nächsten Datei }
6.4.6.3. Erstellen eines regulären Ausdrucks
Syntax: qr / string / Modifikatoren
Dieser Entwurf schafft einen regulären Ausdruck mit den Textstring und Modifikatoren Modifikatoren und kompiliert. Wenn Trennzeichen die Zeichen '', dass der String - Interpolation durchgeführt wird . In anderen Fällen gibt es eine Probe Interpolation und wenn es Variablen enthält, dann für jeden Vergleich gemacht seiner Kompilierung. Um dies zu vermeiden, verwenden Sie den Modifikator o (natürlich nur , wenn Sie sicher sind , dass die Werte der Variablen in die Stichprobe einbezogen bleiben unverändert).
Einmal durch einen regulären Ausdruck erstellt wurden, können sowohl unabhängig als auch als Teil anderer reguläre Ausdrücke verwendet werden. Beispiele:
$ Re = qr / \ d + /; $ String = ~ / \ s * $ {Re} \ s * /; # Wechseln Sie zu einem anderen regulären Ausdruck $ String = ~ $ re; # Unabhängige Nutzung $ String = ~ / $ re /; # das selbe $ Re = qr / $ header / ist; s / $ re / text /; # Ist die gleiche wie s / $ header / text / ist
6.4.6.4. Substitution
Syntax: s / Muster / string / Modifikatoren
Dieser Vorgang vergleicht die angegebene Zeichenfolge mit dem Probenmuster und ersetzt die gefundenen Fragmente auf der Saite. Es gibt die Anzahl der Substitutionen oder falsch (oder besser gesagt, ein leerer String), wenn der Vergleich fehlgeschlagen ist. Vergleichbar ist die Zeichenfolge , die von der linken Operand = gegeben ~ oder! ~. Es muss eine skalare Variable, ein Array-Element oder ein Element eines assoziativen Arrays sein, zum Beispiel:
$ Path = '/ usr / bin / perl'; $ Path = ~ s | / usr / bin | / usr / local / bin |;
Wenn die Zeichenfolge nicht angegeben ist, wird die Substitutionsoperation _ auf der speziellen Variable $ durchgeführt. Insbesondere kann das obige Beispiel wie folgt umgeschrieben werden:
$ _ = '/ Usr / bin / perl'; s | / usr / bin | / usr / local / bin |;
Zusätzlich zu dem Standard, kann es die folgenden Modifikatoren verwendet werden:
Modifikator | Beschreibung |
---|---|
e | Treat String als Ausdruck Perl intern. |
g | Globale Substitution, dh. E. alle Vorkommen der Probe ersetzen. |
o | Kompilieren Sie einen regulären Ausdruck nur einmal. |
Wir können anstelle von // beliebiges Zeichen verwenden, die in den q-Operationen erlaubt. Wenn Muster in einem Paar von Klammern eingeschlossen ist, sollte die Zeichenfolge sein eigenes Paar Begrenzer aufweisen, zB s(foo)[bar]
oder s<foo>/bar/
.
Wenn Trennzeichen die Zeichen '', dann ist die Interpolation Linienmuster sind nicht durchgeführt. In anderen Fällen gibt es eine Probe Interpolation und wenn es Variablen enthält, dann für jeden Vergleich gemacht seiner Kompilierung. Um dies zu vermeiden, verwenden Sie den Modifikator o (natürlich nur , wenn Sie sicher sind , dass die Werte der Variablen in die Stichprobe einbezogen bleiben unverändert).
Wenn Muster eine leere Zeichenfolge ist, stattdessen verwendet es die letzte Ausdruck regelmäßig erfolgreichen Spiel.
In der Standardeinstellung zu ersetzen, nur die erste der Probe gefunden. Um alle Vorkommen der Probe in einer Reihe zu ersetzen, müssen Sie den g Modifikator zu verwenden.
E - Modifikator zeigt an, dass die String - Ausdruck ist. In diesem Fall wird der String eval () Funktion zuerst aufgetragen und dann wird eine Substitution hergestellt. Beispiel:
$ _ = '123'; s / \ d + / $ & * 2 / e; # $ _ = '246' s / \ d / $ & * 2 / eg; # das selbe
Hier einige typische Beispiele der Substitutionsoperation. Löschen von Kommentaren in der Form / * ... * / Text von Java- oder C-Programm:
$ Programm = ~ s { / \ * # Ab Kommentare . *? # Die minimale Anzahl von Zeichen \ * / # End Kommentar } [] Gsx;
Entfernen führende oder nachfolgende Leerzeichen in der Zeichenfolge $ var:
for ($ var) { s / ^ \ s + //; s / \ s + $ //; }
Ordnen Sie die ersten beiden Felder in der $ _. Beachten Sie, dass in der Ersatz - String - Variablen $ 1 und 2 mit $, nicht Metazeichen \ 1 und \ 2:
s / ([^] *) * ([^] *) / $ 2 $ 1 /;
Ersatz-Tabs zu Leerzeichen in den Spalten ausgerichtet, die ein Vielfaches von acht sind:
1, während s / \ t + / '' x (Länge ($ &) * 8 - Länge ($) `% 8) / e;
6.4.6.5. Umschrift
Syntax: tr / list1 / liste2 / Modifikatoren y / list1 / liste2 / Modifikatoren
Umschrift ist es, alle Zeichen aus der Liste list1 zu ersetzen liste2 Zeichen aus der Liste. Sie gibt die Anzahl der Zeichen ersetzt oder gelöscht werden. Die Listen müssen bestehen aus einzelnen Zeichen und / oder Typ az reicht. Zum Konvertieren einer Zeichenfolge angegeben der linke Operand von = ~ oder! ~. Es muss eine skalare Variable, ein Array-Element oder ein Element eines assoziativen Arrays sein, zum Beispiel:
$ Test = 'ABCDEabcde'; $ Test = ~ tr / AZ / az /; # Ersetzen Kleinbuchstaben in Großbuchstaben
Wenn die Zeichenfolge nicht angegeben ist, wird die Substitutionsoperation _ auf der speziellen Variable $ durchgeführt. Insbesondere kann das obige Beispiel wie folgt umgeschrieben werden:
$ _ = 'ABCDEabcde'; tr / AZ / az /;
Wir können anstelle von // beliebiges Zeichen verwenden, die in den q-Operationen erlaubt. Wenn list1 in einem Paar von Klammern eingeschlossen ist, list2 muss sein eigenes Paar Trennzeichen haben, wie tr(AZ)[az]
oder tr<AZ>/az/
.
Typischerweise wird dieser Vorgang tr bezeichnet. Synonym y für Fanatiker Editor sed und verwendet nur von ihnen eingeführt. Transliteration unterstützt die folgenden Modifikatoren:
Modifikator | Beschreibung |
---|---|
c | Ersetzen Zeichen nicht in list1 enthalten. |
d | Zum Löschen von Zeichen, für die kein Ersatz da ist. |
s | Entfernen Sie doppelte Symbole auf Ersatz. |
U | Konvertieren von / nach UTF-8-Codierung. |
C | Konvertieren in / aus Single-Byte-Codierung. |
C Modifikator ist eine Umschrift aller Zeichen nicht in der Liste list1 enthalten.
Zum Beispiel kann der Betrieb tr/a-zA-Z/ /c
/ c alle Zeichen ersetzen , die nicht in lateinischen Buchstaben sind, mit Leerzeichen.
In der Standardeinstellung , wenn List2 kürzer als list1 ist, ergänzt er seine letzte Zeichen, und wenn es leer ist, wird es gleich list1 genommen (es ist bequem , die Nummer einer bestimmten Klasse von Zeichen pro Zeile zu zählen). D Modifikator ändert die Regeln: alle Zeichen von list1, die keine Entsprechung in list2 haben, werden von der Linie entfernt. Zum Beispiel kann der Betrieb tr/a-zA-Z//cd
cd alle Zeichen aus einer Zeichenkette nicht-lateinischen Zeichen zu löschen.
S Modifikator entfernt Duplikate , wenn mehr Zeichen in einer Reihe mit dem gleichen Zeichen ersetzt, werden Sie nur eine Instanz dieses Symbols gelassen werden. Zum Beispiel kann der Betrieb tr/ / /s
entfernt mehrere Räume in einer Reihe.
C und U - Modifizierungsmittel werden für die Umwandlung von Zeichen aus dem System - Kodierung entwickelt UTF-8 und umgekehrt. Die erste davon zeigt die ursprüngliche Kodierung, die zweite - auf dem Kodierungsergebnis. Zum Beispiel tr/\0-\xFF//CU
codiert eine Zeichenfolge aus dem System - Kodierung UTF-8, und tr/\0-\xFF//UC
führt eine inverse Transcodierungs.
Umschrift wird ohne Interpolation Zeichenlisten durchgeführt, so dass es zu verwenden , müssen Sie die Variable eval () Funktion, zum Beispiel:
eval "tr / $ oldlist / $ newlist /";
Kommentare
Kommentar nicht vergessen , dass der Inhalt und der Ton Ihrer Nachrichten , die Gefühle von echten Menschen verletzen können, Respekt und Toleranz gegenüber seinen Gesprächspartnern, auch wenn Sie Ihr Verhalten in Bezug auf die Meinungsfreiheit ihre Meinung nicht teilen, und die Anonymität des Internets, ändert sich nicht nur virtuell, sondern realen Welt. Alle Kommentare werden aus dem Index, Spam - Kontrolle versteckt.