Ich habe von regulären Ausdrücken gehört und nur Anwendungsfälle für einige Dinge gesehen, daher denke ich nicht daran, sie sehr oft zu verwenden. In der Vergangenheit habe ich ein paar Dinge getan und es hat Stunden gedauert. Später rede ich mit jemandem und sie sagen "Hier ist, wie man es mit einem regulären Ausdruck macht".
Was sind die Dinge, für die Sie Reguläre Ausdrücke verwendet haben? Wenn ich mehr Beispiele bekomme, kann ich vielleicht anfangen zu wissen, wann ich sie suchen und benutzen soll.
Viele Dinge. Einschließlich:
Beim Lernen regulärer Ausdrücke kann es hilfreich sein, auch Zurückhaltung zu lernen. Sie könnten versucht sein, wie ich, reguläre Ausdrücke als Lösung für viel zu viele Probleme zu sehen.
Das letzte, für das ich einen regulären Ausdruck verwendet habe, war die Überprüfung der Texteingabe, um sicherzustellen, dass die Eingabezeichenfolge bestimmten Regeln entspricht, zum Beispiel das zweite Zeichen muss ein "-" sein.
Ich habe deine Frage gelesen und habe sofort daran gedacht.
BEARBEITEN: Vergessen, dies als XKCD-Comic zu erwähnen. Ссылка
Die häufigsten Anwendungsfälle sind Strings, die einem Muster entsprechen. In der Regel wird die Suche mit dem Ersetzen von Text, der dem Muster entspricht, mit einer anderen Zeichenfolge kombiniert.
Der folgende Ausdruck entspricht beispielsweise Leerzeichen (nur Leerzeichen und Tabulatoren in diesem speziellen Fall) am Anfang einer Zeile.
%Vor%Dies könnte nützlich sein, wenn Sie den Leerraum abschneiden möchten.
Eingabevalidierungsroutinen dienen als erste Verteidigungslinie für eine Webanwendung. Reguläre Ausdrücke sind eine großartige und robuste Methode, Eingaben zu validieren.
Wenn Sie unbegründete Annahmen über den Typ, die Länge, das Format oder den Eingabebereich treffen, ist Ihre Anwendung wahrscheinlich nicht robust. Die Eingabevalidierung kann zu einem Sicherheitsproblem werden, wenn ein Angreifer feststellt, dass Sie unbegründete Annahmen getroffen haben. Der Angreifer kann dann sorgfältig gestaltete Eingaben bereitstellen, die Ihre Anwendung kompromittieren, indem er SQL-Injection, Cross-Site-Scripting und andere Injektionsattacken versucht. Um diese Sicherheitsanfälligkeit zu vermeiden, sollten Sie Textfelder (wie Namen, Adressen, Steuernummern usw.) validieren und reguläre Ausdrücke verwenden.
Anstatt beispielsweise nur ein erforderliches Feld für eine Nachname-Eingabe hinzuzufügen, verwenden Sie den folgenden Ausdruck, um nur Groß- und Kleinbuchstaben sowie einige Sonderzeichen zuzulassen, die für einige Namen gelten.
^ [a-zA-Z '' - '\ s] {1,40} $
Nun, jedes Mal, wenn Sie etwas anpassen müssen, wenn Sie nur ein wortgleiches Wort suchen, wird es nicht funktionieren. Umbenennen von Dateien, Suchen und Ersetzen im Code, Sie nennen es.
Ein traditionelles Beispiel könnte sein, wenn Sie alle Vorkommen von, sagen wir, Telefonnummern in einer Datei finden wollen. Die Suche nach einzelnen Zahlen wird offensichtlich nicht funktionieren, und nur nach Strichen zu suchen wird wahrscheinlich mehrdeutig sein. Viel besser zu sagen "finde alle Vorkommen von 3 Ziffern, gefolgt von einem Gedankenstrich, gefolgt von 4 Ziffern" (zum Beispiel für grundlegende Zwecke gehalten; in Wirklichkeit möchten Sie vielleicht Vorwahl, verschiedene Trennzeichen, etc.)
Eine weitere nette Sache über Regexps ist, dass Sie einen Teil davon verwenden können, nach dem Sie in Ihrem Ersatz gesucht haben. Wenn Sie also die Ortsvorwahl 555 durch etwas anderes ersetzen möchten, können Sie den Rest der Telefonnummer beibehalten.
Für die Selbstlerner, alles, was Sie über Reguläre Ausdrücke und mehr wissen möchten: Ссылка
Es könnte helfen zu verstehen, warum sie "Reguläre Ausdrücke" genannt werden. Der "reguläre" Teil bedeutet, dass ein Muster erwartet wird. Der Teil "Ausdrücke" impliziert, dass sie in gewisser Weise eine mathematische Darstellung des Textes sind, und dies ermöglicht Ihnen wiederum, Informationen aus dem Text zu extrahieren.
Zum Beispiel habe ich ein Modul geschrieben, das reguläre Ausdrücke verwendet, um Telefonnummern in ihre Bestandteile aufzuteilen - z. B. das Land, die Ortsvorwahl, die Vermittlungsstelle und die Station. Das klingt für einen Menschen einfach, aber für einen Computer ist es nicht so einfach, wenn man bedenkt, dass es so viele Möglichkeiten gibt, Telefonnummern zu schreiben. Sie können +1 (407) 555-1234 oder 407-555-1234 oder 555-1234 (7-stellige Wahl) oder 1.407.555.1234 oder 4075551234 tun. Die Verwendung von regulären Ausdrücken hilft, die Verarbeitung des Textes zu abstrahieren, wenn es bestimmte Dinge gibt dass Sie versuchen, aus Text zu extrahieren.
Vor Jahren waren die Webbrowser von Windows Mobile und Palm PDAs vor dem iPhone sehr eingeschränkt. Sogar CSS war tabu, wenn Sie nicht die neueste Version von Windows Mobile hatten. Weil ich einen geekigen PDA mit einer schicken drahtlosen Zusatzkarte hatte, wollte ich im Internet surfen, anstatt einen Laptop zu kaufen, und so machte ich eine Portal-Website. Eine der Sachen, die ich gemacht habe, war eine Seite, die an bestimmten Teilen des HTML-Codes Transformationen, Umzüge und Ersetzungen vornehmen konnte, entweder generische Operationen wie das Entfernen aller Bilder oder standortspezifisches Zeug. Dies wurde fast alles mit Regex gemacht.
Ich benutze sie ziemlich oft, wahrscheinlich weil ich meistens in einer Linux-Umgebung bin und einfachen Zugriff darauf habe.
reval.*\<widget\<
" \<my_obj\>.*=
" #<volume>[-0-9.]+</volume>#<volume>1.0</volume>
# g" Nachdem ich Regexes benutzt habe, hasse ich das Fenster "Find", weil es so begrenzt ist.
Wie ein anderer Benutzer geantwortet hat, sind reguläre Ausdrücke wesentlich leistungsfähiger globbing, aber sie gehen weit darüber hinaus. Sie müssen "Master Regular Expressions" nicht lesen, um sie zu verwenden, aber ich empfehle das Buch. Ich bin mir sicher, dass es viele Ressourcen im Internet gibt, wie zum Beispiel hier , obwohl ich für keine von ihnen bürgen kann .
Ein weiterer Vorteil der Verwendung regulärer Ausdrücke (ob im Code oder in der Befehlszeile) besteht darin, dass sie stark optimiert wurden. Insbesondere Grep und DFA-Parser sind fast sicher schneller als das, was Sie selbst schreiben würden ... und wahrscheinlich auch Korrigiere das erste Mal. Erfinde das Rad nicht neu, wenn du so ein schönes Handy hast.
Stack Overflow ist in der Tat ein guter Ort, um Anwendungsfälle zu finden:
Denken Sie an Regex als Glob (Sie wissen, *? (a, b, c) [abc]) auf Steroiden.
Ausschneiden von String-Inputs. Zum Beispiel
"Screen Scraping" Webseiten entweder durch direktes Vergleichen mit HTML oder (nützlicher) ASCII-Ausgabe von einem Werkzeug wie w3m, zB um herauszufinden, wann ein Fußballspiel vorbei ist, damit mein Computer die Aufzeichnung stoppen kann
Aufteilen eines E-Mail-Headers in Tag und Wert, um beispielsweise Spam zu identifizieren
Vornamen, Nachnamen und E-Mail-Adresse aus den Schülerunterlagen herausziehen, so dass ich in den Notenbüchern einen Schüler nach Nachnamen identifizieren kann, wenn dieser eindeutig ist, und nach "last, first", wenn eine Disambiguierung erforderlich ist
Reguläre Ausdrücke waren die ersten weit verbreiteten Werkzeuge zur Zeichenfolgenverarbeitung, aber heutzutage bevorzuge ich oft etwas, das auf der Analyse von Ausdrucksgrammatiken basiert, wie die LPEG-Mustervergleicher .
In meinen Webformularen verwende ich häufig Regex, um zu validieren, was der Benutzer in ein Textfeld oder ähnliches eingegeben hat. Eine E-Mail-Adresse muss einige Leerzeichen enthalten, gefolgt vom Zeichen "@", gefolgt von weiteren Leerzeichen, gefolgt von einem Punktzeichen usw. Die Daten müssen eines der zulässigen Formate erfüllen (1/23 / 2008, 23.01.08), damit mein Code genau herausfinden kann, welches Datum eingegeben wurde. Etc.
Wenn Sie in ASP.NET Benutzersteuerelemente oder Masterseiten verwenden, werden sie, auch wenn Sie Ihre Steuerelemente eindeutig benennen, vom Framework gestört. Ich habe einen kleinen Wrapper um die Prototyp $ -Funktion geschrieben, damit ich trotz des Namensmangels manipulierte Steuerelemente in Javascript bekommen kann. Es verwendet einen regulären Ausdruck, um das DOM nach Steuerelementen zu durchsuchen, die mit dem entsprechenden Namen enden.
Ich verwende es auch stark bei der Client / Server-seitigen Validierung von Eingaben, die bestimmten Eingabemustern entsprechen müssen.
Parsing Würfelnotation ("2d6", "3d4 + 10" usw.), um ein Würfelobjekt in Ruby zu erstellen. (Nicht sicher, ob dieser Code der "perfekte" Weg ist, um es zu tun, da ich immer noch Ruby lerne).
%Vor%Sehr schön und einfach.
Einfach ausgedrückt, sind reguläre Ausdrücke immer dann nützlich, wenn Sie Strings verstehen oder manipulieren müssen. Es ist besonders einfach für reguläre Ausdrücke zu erreichen, wenn Sie einen mehrzeiligen Textverarbeitungscodeblock schreiben und Sie erkennen, dass Regex es in einer Zeile tun kann.
Reguläre Ausdrücke eignen sich hervorragend für kleine Textsuchen, Mustervergleiche und Substitutionen in kleinen und mittelgroßen Texten. Einer der Orte, an denen ich RE's benutzt habe, sind Formularfeldvalidierungen.
Wenn es Ihnen nichts ausmacht, können Sie sehr schnell und schmutzig Skripte für alles mit Texten tun.
Ich benutze sie, um nach Primzahlen zu suchen , obwohl ich mich frage, warum es manchmal langsam ist: -)
%Vor%Für die Validierung einer E-Mail-Adresse verwende ich immer regex.
Ich möchte nicht einmal darüber nachdenken, etwas anders zu machen.
Tags und Links language-agnostic regex