7 Stimmen

Haskell-Regex-Syntax

Ich habe einige Probleme mit regexes in haskell. Genauer gesagt:

Prelude Text.Regex.Posix> "1" =~ "\d" :: Bool
<interactive>:1:10:
    lexical error in string/character literal at character 'd'
Prelude Text.Regex.Posix> "1" =~ "\\d" :: Bool
False
Prelude Text.Regex.Posix> "1" =~ "\\\\d" :: Bool
False

Verfügt Haskell nicht über die \d o \s oder andere praktische Escape-Codes? Ja, ich weiß, dass ich das kann [0-9] zu verwenden, aber die Escape-Codes sind für komplexe Regexe viel praktischer. Übersehe ich hier etwas Offensichtliches?

15voto

jmg Punkte 7015

Nein, die Sprache Haskell kennt keine Escape-Sequenzen wie \d y \s oder reguläre Ausdrücke im Allgemeinen. Es gibt nur einige Bibliotheken, die reguläre Ausdrücke anbieten.

Daher müssen Sie nachsehen, ob die von Ihnen verwendete Regex-Bibliothek die \d y \s . Und wenn sie es unterstützen, müssen Sie sie als "\\d" in einer Haskell-Quelldatei.

En \d von Perl abstammt, sind Sie vielleicht erfolgreicher mit regex-pcre .

9voto

pholser Punkte 4728

Ich weiß nicht viel über die Haskell-Regex-Pakete, aber aus Ihren obigen Beispielen mit "Text.Regex.Posix" schließe ich, dass Sie mit regulären POSIX-Ausdrücken arbeiten. Escape-Sequenzen wie \d y \s sind nicht Teil der POSIX-Regex-Syntax, und ich glaube, sie stammen ursprünglich aus Perl und haben sich seitdem in anderen Sprachen verbreitet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X