Haskell正则表达式出乎意料地表现出来

时间:2016-04-30 20:00:48

标签: regex haskell

起初我应该说我的正则表达式知识是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

2 个答案:

答案 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:](字母)
  • dot [:alpha:] - 匹配任何内容
  • 字符串锚点.^
  • 的开头和结尾
  • 明星$ - 重复前0次或更多次
  • 量词*?+{n}{n,m} - 重复 在n和m之间的前面的标记零或一次,一次或多次,n次 时间,分别是n次或更多次
  • 与管道{n,}交替使用

......基本上就是这样。

相关问题