如何在Haskell的Text.Regex库中转义字符?

Ell*_*ron 4 regex haskell escaping posix-ere

介绍

我正在使用Haskell的Text.Regex库,我想匹配一些通常在正则表达式中有意义的字符.据Text.Regex文件,

正则表达式的语法是... egrep的语法(即POSIX"扩展"正则表达式).

显然,在 POSIX扩展正则表达式(ERE)中转义使用反斜杠[与POSIX Basic正则表达式(BRE)不同 ].


问题

但是,当我尝试做这样的事情时:

> import Text.Regex
> matchRegex (mkRegex "\*") "*"
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

<interactive>:1:23:
    lexical error in string/character literal at character '*'
Run Code Online (Sandbox Code Playgroud)

无论我在之后放置什么角色,都会发生同样的事情\.


变通

我可以这样做:

> matchRegex (mkRegex "[*]") "*"
Just []
Run Code Online (Sandbox Code Playgroud)

哪个有效,但它似乎是一个黑客,特别是如果我想连续逃脱几件事(例如mkRegex "[[][(][)][]]"哪些匹配[()]).


这是在POSIX ERE中逃脱的唯一途径吗?为什么Haskell的Text.Regex库支持\不像它应该的那样逃避?

Udi*_*hen 7

我不知道语法,但通常如果你想在字符串中写回斜杠你需要转义它,这意味着:

matchRegex (mkRegex "\\*") "*"
Run Code Online (Sandbox Code Playgroud)

有帮助吗?