4

介绍

我正在使用 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\不像它应该的那样支持转义?

4

2 回答 2

7

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

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

它有帮助吗?

于 2011-10-11T13:29:22.783 回答
3

尝试使用两个反斜杠:

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

我刚刚用 GHCI 尝试过,它奏效了。

于 2011-10-11T13:30:27.867 回答