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

时间:2011-10-11 13:25:09

标签: regex haskell escaping posix-ere

简介

我正在使用Haskell的Text.Regex库,我希望匹配一些通常在正则表达式中有意义的字符。根据{{​​1}}的{​​{3}},

  

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

显然,documentation中的转义使用反斜杠[与POSIX Extended Regular Expressions (ERE)不同]。


问题

然而,当我尝试做这样的事情时:

Text.Regex

我收到以下错误:

> import Text.Regex
> matchRegex (mkRegex "\*") "*"

无论我在<interactive>:1:23: lexical error in string/character literal at character '*' 之后放置什么字符,都会发生同样的事情。


变通

我可以这样做:

\

有效,但看起来像是黑客,特别是如果我想连续逃脱几件事(例如> matchRegex (mkRegex "[*]") "*" Just [] 匹配mkRegex "[[][(][)][]]")。


问题

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

2 个答案:

答案 0 :(得分:7)

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

matchRegex (mkRegex "\\*") "*"

有帮助吗?

答案 1 :(得分:3)

尝试使用两个反斜杠:

matchRegex (mkRegex "\\*") "*"

我刚用GHCI尝试了它,但它确实有效。