介绍
我正在使用 Haskell 的Text.Regex
库,我想匹配一些通常在正则表达式中有意义的字符。根据Text.Regex
的文件,
正则表达式的语法是... egrep 的语法(即POSIX“扩展”正则表达式)。
显然,在 POSIX 扩展正则表达式 (ERE)中转义使用反斜杠 [与POSIX 基本正则表达式 (BRE)不同]。
问题
但是,当我尝试做这样的事情时:
> import Text.Regex
> matchRegex (mkRegex "\*") "*"
我收到以下错误:
<interactive>:1:23:
lexical error in string/character literal at character '*'
无论我在后面加上什么字符,都会发生同样的事情\
。
解决方法
我可以做这样的事情:
> matchRegex (mkRegex "[*]") "*"
Just []
这有效,但它似乎是一个黑客,特别是如果我想连续逃避几件事(例如mkRegex "[[][(][)][]]"
which matches [()]
)。
问题
这是在 POSIX ERE 中逃脱的唯一方法吗?为什么 Haskell 的Text.Regex
库\
不像它应该的那样支持转义?