Wofür haben Sie Reguläre Ausdrücke verwendet?

8

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.

    
percent20 01.01.2009, 10:59
quelle

23 Antworten

12

Viele Dinge. Einschließlich:

  • Befehlszeilen überprüfen
  • Benutzereingaben analysieren
  • Parsen verschiedener Textdateien
  • Untersuchen von Webserverprotokollen
  • Untersuchung der Testergebnisse
  • Text in E-Mails finden
  • Konfigurationsdateien lesen

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.

    
Paul Beckingham 01.01.2009 02:48
quelle
11

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. Ссылка

    
Mark 01.01.2009 03:46
quelle
6

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.

    
Bill the Lizard 01.01.2009 02:46
quelle
4

Der Kern dessen, wofür ich Regex verwenden würde, ist:

  1. Validierung der Eingabe
  2. Reinigung der Eingabe
  3. Umstrukturierung des Inputs
  4. Suchen nach Teilstrings in der Eingabe
OJ. 01.01.2009 03:00
quelle
4

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} $

    
Craig McKeachie 01.01.2009 03:04
quelle
2

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.

    
J Cooper 01.01.2009 02:50
quelle
2

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.

    
Michael Bray 01.01.2009 03:08
quelle
2

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.

    
Marc Charbonneau 01.01.2009 03:09
quelle
2

Ich benutze sie ziemlich oft, wahrscheinlich weil ich meistens in einer Linux-Umgebung bin und einfachen Zugriff darauf habe.

  • Nach Dingen in einem Editor suchen, vor allem, wenn ich zwei Teile in einer Zeile kenne, aber nicht, was dazwischen ist (bitte entschuldigen Sie die überflüssigen Leerzeichen)
    • Wo ist die Reval-Funktion, die ein Widget annimmt? " reval.*\<widget\< "
    • Wo ist my_obj zugewiesen? " \<my_obj\>.*= "
  • Suchen und ersetzen, um eine Modifikation einer Datendatei zu erzeugen: d. h. alle Lieferungsvolumina auf ein " #<volume>[-0-9.]+</volume>#<volume>1.0</volume> # g"
  • setzen
  • Ausgabe an den Bildschirm anpassen (Leerzeichen oder uninteressante Felder entfernen).
  • Um Datendateien in ein anderes Format zu migrieren, z. B. um Protokolldateien zu erstellen und eine Datei für gnuplot zu erstellen, die Leistungsdaten grafisch darstellt.
  • Für programmatische Verwendungen, z. B. Muster, die mit dem Namen eines Datenwerts übereinstimmen, um ihn anders zu behandeln, wenn er bestimmten Kriterien entspricht, die am einfachsten mit einem regulären Ausdruck ausgedrückt werden.

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.

    
markets 01.01.2009 05:11
quelle
1

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.

    
Zach Scrivena 01.01.2009 02:46
quelle
1

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 .

    
Norman Ramsey 01.01.2009 02:54
quelle
1

Ich benutze sie im Grunde für alles, wo ich etwas mehr als genaues String-Matching benötige, aber es ist mir egal, ob Leistung oder Wartbarkeit irgendetwas tun, was mehr als ein paar Zeilen Code erfordern würde.

    
dsimcha 01.01.2009 03:05
quelle
1

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.

    
Kurt W. Leucht 01.01.2009 04:28
quelle
0

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.

    
tvanfosson 01.01.2009 02:52
quelle
0

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.

    
Mark A. Nicolosi 01.01.2009 04:01
quelle
0

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.

    
John Fisher 01.01.2009 05:17
quelle
0

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.

    
systemsfault 01.01.2009 11:14
quelle
0
%Vor%     
user32848 01.01.2009 19:28
quelle
0

Ich habe sie auch verwendet, um zufällige Daten zu erstellen, die den bestehenden Validierungsregeln entsprechen.

    
Goran 18.02.2009 09:10
quelle
0
  1. Trolling-Protokolldateien für Ausnahmen oder Validierungszeilen (dh "Subsystem A started ..."), usw.
  2. Ersetzen von Text (zB in Quelldateien, um schnell zu Sysout-Anweisungen zu werden)
  3. Erklären den Mitarbeitern, wie mächtig Regex ist.
akf 21.06.2009 03:57
quelle
0

Ich benutze sie, um nach Primzahlen zu suchen , obwohl ich mich frage, warum es manchmal langsam ist: -)

%Vor%     
Marco Mariani 13.01.2011 08:57
quelle
0

Für die Validierung einer E-Mail-Adresse verwende ich immer regex.

Ich möchte nicht einmal darüber nachdenken, etwas anders zu machen.

    
Matthew Rapati 01.01.2009 02:47
quelle
0

Ich habe es nach einer OCR Daten analysieren lassen. Regex sind nützlich, um die Fehler zu verwerfen und die echten Daten zu behalten, nach denen wir gesucht haben.

    
Jonathan 04.03.2013 10:14
quelle

Tags und Links