Zu finden, was abgestimmt und anderen erweiterten FunktionenManchmal ist alles, was Sie brauchen, ist zu wissen, ob die Eingabe von Text ein Muster gefunden. Häufiger, möchten Sie weitere Daten, die den spezifischen Prozess abgestimmt wurden. Zum Beispiel, hofft man, dass Daten von Ihrem Web-Formular eine gültige Kreditkarte Zahl - eine Folge von 13 bis 16 Ziffern enthalten. Sie würden nicht einfach nur, um das Auftreten dieses Musters zu überprüfen, was Sie tun wollen würde, ist die Ziffernfolge, die abgestimmt wurde zu extrahieren, so dass Sie eine weitere Überprüfung Kontrollen zur Anwendung kommen könnte. Reguläre Ausdrücke können Sie Gruppen von Muster-Elemente definieren, eine allgemeinen Muster kann zum Beispiel haben einige wörtlichen Text, eine Gruppe mit einer variablen Länge Folge von Zeichen aus einer Klasse, wörtlicher Text, eine andere Gruppe mit verschiedenen Charakteren, und so weiter. Wenn das Muster verglichen wird, die reguläre Ausdrücke Funktionen, die Details des gesamten Spiel und die Teile für jede der einzelnen Gruppen abgestimmt zu speichern. Diese Daten werden in globalen Variablen in der Perl-Kern definiert gespeichert. Die Gruppen der Muster-Elemente, deren Ergebnisse in der Zeichenfolge erforderlich sind, sind in Klammern gesetzt. Also, ein Muster für das Extrahieren von 13-16 ein Sub-stellige Zeichenkette aus einem längeren String könnte / \ D (\ d (13,16)) \ D /, wenn eine Zeichenfolge dieses Muster passt, wird die Variable $ 1 Halten Sie die Ziffer String. Das folgende Beispiel zeigt die Extraktion von zwei Felder aus einer Eingabezeile. Die Eingabezeile sein soll eine Nachricht, die einen Betrag enthält. Der Dollar-Betrag wird erwartet, dass von einem Dollar-Zeichen bestehen, eine bestimmte Anzahl von Ziffern, einem optionalen Dezimalpunkt und eine optionale Bruchteil betragen. Das Muster für dieses Spiel verwendet wird: / \ $ ([0-9] +) \.? ([0-9] *) \ D / Ihre Elemente sind: \ $ Ein Dollar-Zeichen ([0-9] +) Eine nicht leere Folge von Ziffern bilden erste Gruppe \.? Ein optionaler Dezimalpunkt ([0-9] *) Eine optionale Folge von Ziffern bilden zweite Gruppe \ D Jeder "nicht digit 'Charakter Der Text, der die erste Untergruppe in Klammern entspricht, wird in der Perl-Core-Variablen über $ 1, der Text passend zur zweiten Gruppe von Zahlen würden in $ 2 gehen. Da die zweite Untergruppe Ausdruck angibt "Null oder mehr Stellen", ist es möglich für $ 2 auf einen leeren String nach einem erfolgreichen Spiel zu halten. Die Variablen $ 1, $ 2 usw. können nur gelesen werden, die Daten Werte müssen von diesen Variablen kopiert werden, bevor sie geändert werden können. while (1) (print "String eingeben:"; $ str = Beispiele für Test-und Ausgänge sind: String eingeben: Dies ist ein Test des $-Programm. Ergab leider Dollar Extraktor String eingeben: Dieses Programm kostet $ 0. 0 Dollars und Cents 0 String eingeben: Dieses Programm soll $ 34,99 kosten 34 Dollar und 99 Cent String eingeben: QUIT
Oft müssen Sie ein Muster wie: Einige feste Text; Ein String, dessen Wert ist willkürlich, sondern ist für die Verarbeitung benötigt werden; Einige weitere festen Text. Sie verwenden .* auf einen beliebigen Suchbegriff entsprechen, so wenn Sie versuchen, die sub-string zwischen Fixed die Worte 'und' Text ', können Sie das Muster / Fixed (.*) text / Nutzung zu extrahieren: while (1) (print "String eingeben:"; $ str = Beispiel Ein-und Ausgänge: String eingeben: Fixed den Text auf Folie. Matched mit substring bis String eingeben: Fixed diesen Text. Jetzt schon ab auf einen anderen Text zu arbeiten. Matched mit substring diesen Text. Jetzt schon ab auf die Arbeit der anderen Die Zusammenführung von beliebigen Zeichenketten kann manchmal problematisch. Der Matching-Algorithmus ist "gierig" - er versucht, die längste Zeichenfolge suchen die passende. Es gibt subtilere Kontrollen, können Sie Muster wie .* verwenden? was eine minimale string (so in der zweiten der obigen Beispiele entsprechen, würden Sie das Spiel 'dieses'). Manchmal gibt es einen Bedarf für komplexe Muster wie: fixed_text (somepattern) other_stuffSAMEPATTERNrest_of_line Diese Muster können durch den Einsatz von "Back Referenzen" im Muster-String definiert. Werden Zurück Angaben beziehen sich auf abgestimmt Untergruppen-strings.When der Mustererkennung ist die Überprüfung des Musters, findet er eine mögliche Übereinstimmung für das erste Sub-Zeichenkette (der Element "(somepattern)" im Beispiel) und speichert diesen Text in der Perl-Core-Variable $ 1. Eine Referenz, in der Form \ 1, das auftritt, später in das Spiel Muster wird dynamisch durch diese gespeichert teilweise Übereinstimmung ersetzt werden. Die Mustererkennung kann dann bestätigen, dass das gleiche Muster wiederholt wird. Zurück Verweise sind in der folgenden Code-Fragmente dargestellt. Diese Fragmente könnten bilden einen Teil eines Perl-Skript, das war es, eine annähernde Übersetzung des Pascal-Code in C-Code. Eine solche Transformation nicht vollständig automatisiert werden (die Sprachen haben einige grundlegende Unterschiede, wie die Fähigkeit zu Pascal Nest Prozedurdeklarationen), jedoch können große Teile der Übersetzung Aufgabe automatisiert werden. Die einfachste Transformation Operationen, die man möchte, sind: Count: = Count + 1; => Count + +; Count: = Count * Mul; => Graf *= Mul; Sum: = Sum + 17; => Summe + = 17; Für diese, müssen Sie ein Muster, das: Spiele einen Namen (Lvalue), das ist zu angepasst werden sub-string $ 1. Spiele Pascal: = Zuweisungsoperator. Spiele einen anderen Namen, um das erste, was identisch ist angepasst, so müssen Sie Rückverweis \ 1 in das Muster. Entspricht einem Pascal +, -, *, / Betreiber, das ist zu angepasst werden sub-string $ 2. Spiele entweder eine Zahl oder einen anderen Namen; match sub-string $ 3. Spiele Pascals Einstellung ",". Ermöglicht zusätzliche Leerzeichen überall. Wenn eine Eingabezeile dem Muster entspricht, kann das Programm eine überarbeitete Linie, die C's Änderung Zuweisungsoperatoren verwendet (+ +, + = etc.), Eingänge, die nicht übereinstimmen können ausgegeben werden unverändert ausgegeben. Ein kleiner Test-Framework, dass Veränderungen nur für '+' und 'zeigt - "Betreiber ist: while (1) (print "String eingeben:"; $ str = Das Muster hier nötig ist: / \ s * ([A-Za-z] \ w *) *: * = \ 1 * (\ + | \ * | \ / | -) * (([0-9 ]+)|([ A - Za-z] \ w *)) *, /) Die Teile sind: s * eine beliebige Anzahl von Leerzeichen oder Tabulatoren. ([A-Za-z] \ w *) entspricht eine Zeichenfolge, die mit einem Buchstaben beginnt, dann hat eine beliebige Anzahl von Buchstaben, Ziffern und Unterstrich-Zeichen (sollte gültig Pascal Variablenbezeichnern Capture). Das ist abgestimmt Untergruppe $ 1; ihr Wert wird später in das Muster verwiesen werden über die Rückverweis \ 1. Sein Wert kann bei der Verarbeitung Code verwendet werden. '*' Ein Raum mit einem * Quantor (null oder mehr); passt zu jedem dieser Räume, die nach dem Variablennamen erscheinen und vor der Pascal-Zuweisungs-Operator: =. : = Zeichenkette, die die Zuordnung von Pascal Betreiber entspricht. '*' Wieder treffen Vorkehrungen für die zusätzlichen Leerzeichen ein. \ 1 der Rückseite Referenzmuster. Erforderlich, um festzustellen, ob es funktioniert auf Formen wie sum: = sum + val;. '*' Die üblichen Vorkehrungen für zusätzliche Leerzeichen. (\ + | \ * \ \ / | -) Spiel ein Pascal binärer Operator. (Zeichen wie '+ haben "sein" entkommen ", weil ihre normale Interpretation ist als Bedienelemente in der Muster-Definition.) '*' Möglich Räume. (([0-9 ]+)|([ A-Za-z] \ w *)) den Abgleich mit einem Sub-String, der entweder eine Folge von Ziffern - [0-9] + - oder eine Pascal Variablenname. '*' As usual, Räume. ; Pascal-Anweisung separator Reguläre Ausdrücke für komplexe Mustererkennung können sehr groß werden. Ich habe gehört, per E-Mail, Gerüchte über eine 4000 Zeichen Ausdruck, erfasst die wichtigsten Elemente von E-Mail-Adresse und die Rücksichtnahme auf die Mehrheit der Variationen in den Formen des E-Mail-Adressen! Programme, die nicht erarbeiten Text verwandelt, wie ein ehrgeiziger Version des Spielzeugs "Pascal-Konverter C", in der Regel müssen viele verschiedene Transformationen in die gleiche Richtung der Eingabe anwenden. Zum Beispiel, wenn ein Pascal ... muss dann an, wenn C's (...)... Stil neu geschrieben werden. Wird die Vorbehaltsware Teil dieser Erklärung beinhaltet eine Pascal Nicht-Operator, muss umgeschrieben werden mit C's! Betreiber. Eine solche Transformation Programme nicht einfach eine Zeile gelesen, eine Transformation anwenden und Ausgabe der transformierten Linie. Stattdessen werden sie nacheinander auf die Zeichenfolge vor Ort aufgetragen. Nach jeder Veränderung, ist die aktualisierte string gegen andere mögliche Muster und deren Ersatz. Perl vergewissert hat, eine Ersetzung Wirtschaftsteilnehmer, der diese in situ führt verwandelt von Strings. Eine Substitution Pattern besteht aus einem regulären Ausdruck, der Funktionen in der Quelle und Ersatz-String Text definiert. Die Muster und Ersatz kann abgestimmt übernehmen Sub-Strings, so ist es möglich, eine Variable Teil des Textes in einer festen Kontext eingebettet zu extrahieren und zu definieren, in denen ein Ersatz der variablen Text ist in einer leicht veränderten Kontext eingebettet. Die imaginäre "Pascal, C Transformator "ist ein weiteres Beispiel. Man müßte nicht Pascal von dem Betreiber zu ändern C's! Betreiber. Die häufigsten Fälle, die leicht zu übersetzen wären, sind: L-Wert: = nicht Ausdruck; => L-Wert! = Expression; if (nicht Ausdruck), dann => if (! Ausdruck), dann Die if-Anweisung würde zu einer weiteren verwandelt, die, wenn ... bilden dann von den entsprechenden C ersetzen konstruieren unterzogen werden. Eine Substitution Muster, dass diese Transformationen machen könnte, ist: s /(:=| \ () * nicht + / \ 1! /; Das Muster definiert: Eine Untergruppe, der entweder die wörtliche Reihenfolge: = oder eine linke Klammer (wie entkommen \ (). Optional Räume. Die wörtliche nicht. Ein oder mehrere Räume. Der Ersatz ist, was den Text abgestimmt Untergruppe (entweder = oder linke Klammer), einem Leerzeichen und C's! Betreibers. Substitutionsmuster würde im Code wie folgt verwendet werden: while ($ str = ) (Chomp ($ str); # Sequenz von Transformationen bis zu $ str ... # next, beschäftigen sich mit dem Betreiber nicht Pascal $ str = ~ s /(:=| \ () * nicht + / \ 1! /;. .. print $ str, "\ n";) Ihre ersten Anwendungen von regulären Ausdrücken werden nur die einfachsten Formen der Muster zu verwenden. Ihre Aufgaben werden, nachdem alle, werden einfache Dinge wie das Extrahieren einen Betrag von einigen Eingabe von Text-, Trenn eine IP-Adresse von einem Server anmelden, oder die Kreditkarten-Unternehmen identifizieren bevorzugt wird. Aber es ist möglich, und es ist oft sinnvoll, zu versuchen, mehr anspruchsvolle Spiele und verwandelt. Sie können viele Ideen von der Perl-Tutorial und perlretut perlre Referenzdokumentation. Ein Artikel eingereicht von Andrew Peterson Disclaimer:Unsere Website ist nicht verantwortlich für den Inhalt dieses Artikels. Webarticles ist eine kostenlose Informationsquelle. Wichtig: Dieser Artikel "Finding was abgestimmt und andere erweiterte Funktionen" wurde durch ein automatisches Software übersetzt. Wir fühlen uns leid für alle Rechtschreibfehler, die möglicherweise aufgetreten sind. Vielen Dank für Ihr Verständnis.
|
|||||
| Online: 249 users browsing the articles directory |
|
|