Frage

Ich habe viele Gemeinsamkeiten in den Regex-Funktionen verschiedener Regex-fähiger Tools/Sprachen gesehen (z. B.Perl, Sed, Java, Vim usw.), aber ich habe auch viele Unterschiede.

Gibt es ein Standard Teilmenge der Regex-Funktionen, die alle Regex-fähigen Tools/Sprachen unterstützen?Wie unterscheiden sich die Regex-Funktionen zwischen Tools/Sprachen?

War es hilfreich?

Lösung

Vergleichen Sie die Varianten regulärer Ausdrücke

http://www.regular-expressions.info/refflavors.html

Andere Tipps

Die meisten Tools/Sprachen für reguläre Ausdrücke unterstützen diese grundlegende Fähigkeiten:

  1. Zeichenklassen/-sätze und ihre Negation - []
  2. Anker - ^$
  3. Wechsel - |
  4. Quantoren - ?+*{n,m}
  5. Metazeichen - \w, \s, \d, ...
  6. Rückverweise – \1, \2, ...
  7. Punkt - .
  8. Einfache Modifikatoren wie /g und /i für Global und Ignorieren der Groß-/Kleinschreibung
  9. Fluchtcharaktere

Erweiterte Tools/Sprachunterstützung:

  1. Ausblicke und Hintergründe
  2. POSIX-Zeichenklassen
  3. Wortgrenzen
  4. Inline-Switches ermöglichen beispielsweise die Nichtberücksichtigung der Groß-/Kleinschreibung nur für einen kleinen Abschnitt der Regex
  5. Modifikatoren wie /x, um zusätzliche Formatierungen und Kommentare zu ermöglichen, /m für mehrzeilige
  6. Benannte Captures
  7. Unicode

Wenn Sie die grep-Regexp-Grammatik und nicht die Egrep-Grammatik oder die Sed-Regexp-Grammatik verwendet haben, sollten Sie eine sichere Teilmenge auf vielen Plattformen und Tools verwenden.

Das Einzige, was Sie dann stören könnte, ist, wenn Sie zwischen Regexp-Implementierungen mit Finite State Automatons (FSA) und solchen mit Backtracking wechseln, z. B.Quantor-Implementierungen variieren von grep bis Perl.

FSA-basierte Implementierungen finden die längste Übereinstimmung beginnend an der ersten möglichen Position.Zurückverfolgende finden die linksgerichtete erste Übereinstimmung, beginnend an der ersten möglichen Position.Das heißt, es wird jeden Zweig in der Reihenfolge im Muster ausprobieren, bis eine Übereinstimmung gefunden wird.

Betrachten Sie die Zeichenfolge "xyxyxyzz", und das Muster "(xy)*(xyz)?".FSA-basierte Engines entsprechen dem längstmöglichen Teilstring. "xyxyxyz".Backtracking-basierte Engines stimmen mit der linksgerichteten ersten Teilzeichenfolge überein. "xyxyxy".

Es gibt keinen Standardmotor.Das POSIX Extended Regular Expression-Format ist jedoch eine gültige Teilmenge der meisten Engines und kommt einer standardisierten Teilmenge wahrscheinlich am nächsten.

Sehen Sie sich die Syntax für reguläre Ausdrücke von Emacs an: http://www.gnu.org/software/emacs/manual/html_node/emacs/Regexps.html#Regexps.

Ich erinnere mich, dass ich gelesen habe, dass die Syntax von Emacs in Stein gemeißelt ist (aus Gründen der Abwärtskompatibilität), wenn Sie also kompatibel sein möchten alles, machen Sie alles damit kompatibel.Einige Tools unterstützen dies möglicherweise, andere möglicherweise nicht.

Sie haben zwar ein würdiges Ziel, aber ich denke, es wird äußerst schwierig zu erreichen sein, und ich habe auch festgestellt, dass die Arbeit mit den regulären Ausdrücken von Emacs schwierig ist.Vielleicht sind 99 % von allem gut genug, wenn es Sie glücklicher und produktiver macht?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top