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

Cha*_*ert 9 haskell

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

简单的GHCI示例:

> import Text.Regex.Posix
> "abcdefghijklmnopqrstuvwxyz0123456789" =~ "abcdefghijklmnopqrstuvwxyz0123" :: String
"abcdefghijklmnopqrstuvwxyz0123"
> "abcdefghijklmnopqrstuvwxyz0123456789" =~ "abcdefghijklmnopqrstuvwxyz01234" :: String
""
Run Code Online (Sandbox Code Playgroud)

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

如果我在模式中添加一些更有效的字符,它甚至更奇怪:

> "abcdefghijklmnopqrstuvwxyz0123456789" =~ "abcdefghijklmnopqrstuvwxyz01234567" :: String
"ab"
Run Code Online (Sandbox Code Playgroud)

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

我的环境:

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

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

Cha*_*ert 8

讨论之后,这个库似乎还存在其他问题,这些问题源于底层C代码未正确移植到64位架构.

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