为什么Text.Regex.Posix中的正则表达式模式的长度有限制?

时间:2016-07-12 13:39:32

标签: haskell

我在正则表达式模式的长度上看到一个奇怪的任意限制,在30个字符的字符串之后,有趣的事情开始发生。

简单的GHCI示例:

> import Text.Regex.Posix
> "abcdefghijklmnopqrstuvwxyz0123456789" =~ "abcdefghijklmnopqrstuvwxyz0123" :: String
"abcdefghijklmnopqrstuvwxyz0123"
> "abcdefghijklmnopqrstuvwxyz0123456789" =~ "abcdefghijklmnopqrstuvwxyz01234" :: String
""

唯一的区别是在最后一个模式的末尾添加了4。它是一个有效的正则表达式,匹配,但它给了我一个空字符串。

如果我在模式中添加一些更有效的字符,那就更奇怪了:

> "abcdefghijklmnopqrstuvwxyz0123456789" =~ "abcdefghijklmnopqrstuvwxyz01234567" :: String
"ab"

它告诉我,只有在明显错误时才匹配ab

我的环境:

  • 堆栈版本1.1.2(解析器lts-6.7)
  • GHC版本7.10.3
  • 操作系统:Windows 10
  • 正则表达式-POSIX-0.95.2

完全卸载并重新安装Stack和所有软件包都无法解决问题

1 个答案:

答案 0 :(得分:8)

this discussion之后,这个库的其他问题似乎源于底层C代码没有正确移植到64位架构。

我已切换到regex-tdfa包,不再遇到这些问题。