起初我应该说我的正则表达式知识是https://regex101.com - 恭维。我不知道我是否错过了haskell部分或正则表达式部分:
我试图使用正则表达式来匹配网站的域名(stack.flow.com来自meta.stackoverflow.com)。对于演示,我使用简单的正则表达式" [\ w] +。[\ w] + $"在https://regex101.com正确行为。但是,在haskell:
_values[pos]
导致此行为的原因是什么?如何解决?
GHCI版本是7.10.3, regex-tdfa版本是1.2.1
答案 0 :(得分:3)
我不确定,但\w
似乎不受tdfa的支持。当我使用[A-Za-z0-9]
时,输出正确
Prelude RX> "google.com" RX.=~ "[A-Za-z0-9]+\\.[A-Za-z0-9]+$" :: Bool
True
\\w
被视为字符w
字面上\\d
字面上被视为字符d
。
以下是可用于此软件包的符号(典型的DFA引擎行为。注意: - 此引擎也基于DFA)
[[:digit:]] - Digits ([0-9])
[[:alpha:]] - Alphabets ([A-Za-z])
[[:alnum:]] - Alphanumeric ([A-Za-z0-9])
所以,你也可以使用
Prelude RX> "www.www" RX.=~ "[[:alnum:]]+\\.[[:alnum:]]+$" :: Bool
True
答案 1 :(得分:3)
我认为该软件包使用POSIX Extended Regular表达式。这就像rock321987观察到的那样,perl / pcre are not supported中使用的def memoize[I, O](f: I => O): I => O = new mutable.HashMap[I, O]() {self =>
override def apply(key: I) = self.synchronized(getOrElseUpdate(key, f(key)))
}
或\w
序列,以及相对于当今强大的正则表达式引擎的功能非常有限。
Posix ERE确实提供了一些built-in, weird looking character classes,例如\d
,相当于[:alnum:]
。
很难找到真正简明的信息,但总结所提供的信息here,这就是你对POSIX ERE的看法:
[A-Za-z0-9]
括号,包括12个内置插件,如[]
(字母数字)和[:alnum:]
(字母)[:alpha:]
- 匹配任何内容.
和^
$
- 重复前0次或更多次*
,?
,+
,{n}
和{n,m}
- 重复
在n和m之间的前面的标记零或一次,一次或多次,n次
时间,分别是n次或更多次{n,}
交替使用......基本上就是这样。