Suche…


Bemerkungen

Da reguläre Ausdrücke entweder auf eine reguläre Grammatik oder auf eine kontextfreie Grammatik beschränkt sind, kommt es häufig zu Missbrauch von regulären Ausdrücken. In diesem Thema gibt es einige Beispiele, in denen Sie KEINE regulären Ausdrücke verwenden sollten, sondern stattdessen Ihre bevorzugte Sprache.

Einige Leute denken, wenn sie mit einem Problem konfrontiert sind:
"Ich weiß, ich werde reguläre Ausdrücke verwenden."
Jetzt haben sie zwei Probleme.

- Jamie Zawinski

Passende Paare (wie Klammern, Klammern ...)

Einige reguläre Ausdrücke (z. B. .NET) können kontextfreie Ausdrücke verarbeiten und klären dies. Dies ist jedoch bei den meisten Standardmotoren nicht der Fall. Und selbst wenn dies der Fall ist, haben Sie einen komplexen, schwer lesbaren Ausdruck, während die Verwendung einer Parsing-Bibliothek die Arbeit erleichtern kann.

Einfache Stringoperationen

Da reguläre Ausdrücke viel bewirken können, ist es verlockend, sie für die einfachsten Operationen zu verwenden. Die Verwendung einer Regex-Engine verursacht jedoch Kosten in Bezug auf Arbeitsspeicher und Prozessor: Sie müssen den Ausdruck kompilieren, den Automaten im Speicher ablegen, ihn initialisieren und ihn dann mit der Zeichenfolge ausführen, um ihn auszuführen.

Und es gibt viele Fälle, in denen es nicht nötig ist, es zu benutzen! Was auch immer Ihre Sprache ist, es hat immer die grundlegenden Werkzeuge zur Bearbeitung von Strings. Wenn also in Ihrer Standardbibliothek ein Werkzeug zum Ausführen einer Aktion vorhanden ist, verwenden Sie dieses Werkzeug und nicht einen regulären Ausdruck:

  • eine Zeichenfolge teilen?

Zum Beispiel funktioniert das folgende Snippet in Python, Ruby und Javascript:

'foo.bar'.split('.')

Welches ist einfacher zu lesen und zu verstehen sowie viel effizienter als der (irgendwie) äquivalente reguläre Ausdruck:

(\w+)\.(\w+)
  • Leerzeichen entfernen?

Gleiches gilt für nachfolgende Leerzeichen!

'foobar     '.strip() # python or ruby
'foobar     '.trim() // javascript

Welches wäre dem folgenden Ausdruck gleichwertig:

([^\n]*)\s*$ # keeping \1 in the substitution

Analysieren von HTML (oder XML oder JSON oder C-Code oder…)

Wenn Sie etwas von einer Webseite (oder einer Repräsentations- / Programmiersprache) extrahieren möchten, ist ein regulärer Ausdruck das falsche Werkzeug für die Aufgabe. Verwenden Sie stattdessen die Bibliotheken Ihrer Sprache, um die Aufgabe zu lösen.

Wenn Sie HTML, XML oder JSON lesen möchten, verwenden Sie einfach die Bibliothek, die es richtig analysiert und als verwendbare Objekte in Ihrer bevorzugten Sprache dient! Am Ende erhalten Sie lesbaren und wartungsfreundlichen Code, und Sie werden nicht enden



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow