Ich habe kürzlich reguläre Ausdrücke gelernt und ich liebe es, sie zu schreiben / zu benutzen. Ich suche nach Ideen und mehr Möglichkeiten, um sie zu nutzen, aber ich möchte sie nicht als Allzweck-Tool missbrauchen, wie oft von Menschen gewarnt.
Für welche Art von Dingen sollte ich reguläre Ausdrücke verwenden und wo sollte ich sie nicht verwenden? (Abgesehen vom Offensichtlichen: HTML-Parsing).
self-improvement
regular-expressions
Klicken Sie auf Upvote
quelle
quelle
if
.Antworten:
Wenn sie leuchten, haben Sie eine Definition für eine Zeichenfolge, die gut definiert und einfach ist. Sie können also sowohl (a) überprüfen, ob eine Eingabe mit dem Muster übereinstimmt, als auch (b) alle Teile des Musters aus dieser Eingabe extrahieren. in einer einzigen Regex-Operation.
Zum Beispiel musste ich mich erst neulich mit bestimmten Codes befassen, die aus zwei einzelnen Buchstaben (von denen einer drei Optionen hatte, der andere ein beliebiges Alpha), einem Datum und einer zweistelligen Zahl wie dieser bestanden : MR_20110508_01
Ein einfacher regulärer Ausdruck mit 4 benannten Gruppen ermöglichte es mir, einen einzelnen Anruf zu tätigen, wobei beide überprüften, ob ein eingehender Code gültig war, und mir 4 benannte Gruppen gaben, auf die ich zugreifen konnte, um die 4 Teile herauszuholen.
Je mehr willkürlichen Inhalt das Ziel des regulären Ausdrucks enthalten kann oder je mehr Regeln von anderen Teilen des Inhalts abhängen, desto wahrscheinlicher wird es, dass Sie in die Hölle von Jamie Zawinski "Jetzt haben Sie zwei Probleme" geraten.
quelle
Die meisten Zeichenfolgenabgleichsaufgaben können von regulären Ausdrücken profitieren. Wenn Sie aufhören, das Matching aufzurufen, und das Parsing starten, sind reguläre Ausdrücke nicht mehr so hilfreich. Normalerweise liegt das daran, dass die Leute es Parsing nennen, wenn es sich um Verschachtelung oder eine andere Rekursion handelt, mit der reguläre Ausdrücke nicht umgehen können.
Wahrscheinlich ist der Ort, den ich am häufigsten benutze, an dem einige Leute nicht wissen, dass sie verfügbar sind, in meinem Editor, während sie nach etwas suchen. Sie schaffen es nicht so oft in meinen Code, wie sie mir helfen, schneller zu programmieren.
quelle
Meine Antwort ist negativ: Versuchen Sie nicht , einen Parser (zum Beispiel für HTML ) mit regulären Ausdrücken zu schreiben . Sie können mit ihnen alle Arten von nützlichen Informationen extrahieren, aber es gibt einige Dinge, die Sie nicht tun können. Ich denke darüber nach, Regexps zu verstehen, die mit SQL, C und Python vergleichbar sind - es ist einer der Bausteine des modernen Computing.
quelle
Ich würde sagen, ein verräterisches Zeichen dafür, dass ein Regex nicht funktioniert, ist, wenn Sie etwas benötigen, das verschachtelt werden kann. ZB eine Programmiersprache (oder HTML / XML / etc.) Sobald Sie mit dem Verschachteln beginnen, müssen Sie den Status speichern und eine Statusmaschine verwenden.
Auch wenn Sie sich den regulären Ausdruck für E-Mails hier ansehen, können Sie feststellen, dass Regexe schnell unlesbar werden können. Manchmal, obwohl Sie reguläre Ausdrücke verwenden können, macht die Verwendung einer Grammatik die Dinge klarer. Selbst mit einfacheren regulären Ausdrücken können Sie schnell etwas erstellen, das schwer zu lesen / zu pflegen ist.
Zusätzlich gibt es viele Aufgaben, für die kein regulärer Ausdruck erforderlich ist. Beispielsweise könnten Sie eine Zeichenfolge von durch Kommas getrennten Feldern mithilfe eines regulären Ausdrucks aufteilen, aber es ist viel einfacher, nur string.split (",") zu sagen. Im Allgemeinen erfordert ein regulärer Ausdruck mehrere Schritte / Suchvorgänge, während das Teilen in einer Anweisung erfolgt. Auch für eine einfache Suche ist es effizienter und übersichtlicher, eine integrierte Suchroutine zu verwenden.
quelle
Ich stelle fest, dass der Schrägstrich zwischen Dose und Sollte in Ihrer Frage nicht das Wichtigste unterstreicht: den Unterschied zwischen beiden.
Es gibt Dinge, die mit regulären Ausdrücken gemacht werden können, die nicht mit ihnen gemacht werden sollten. Ein Beispiel ist die Verwendung des folgenden regulären Ausdrucks:
Das entspricht Dezimalzahlen, die durch 7 teilbar sind (und nur diese; Quelle ).
quelle
Es gibt hier keine festen Regeln, aber ich würde sagen, jeder Text, der eine Aufgabe besitzt, für den keine Bibliothek verfügbar ist, ist reif für reguläre Ausdrücke. Es hängt auch stark von der Regex-Unterstützung der von Ihnen verwendeten Sprache ab. Perl bietet umfangreiche Unterstützung für reguläre Ausdrücke, Java dagegen weniger. Aus diesem Grund würden Sie erwarten, dass Regex eher in Perl als in Java verwendet wird.
quelle