Haskell - 正则表达式奇怪的行为

Haskell - Regex Strange behaviour

我正在尝试在 haskell 中使用正则表达式。但我注意到了一些奇怪的事情。我正在尝试使用可能包含以下之一的字符串进行筛选:sun.java、org.testng、sun.reflect、java.lang 等 我的正则表达式是 (sun.java|org.testng|sun.reflect|java.lang) 它适用于 regex validator 但是当我在 haskell: 下面是结果。

=>

Prelude Text.Regex.Posix> " org.testng.Hello.world" =~ "(sun.java|org.testng|sun.reflect|java.lang)" :: Bool
True
Prelude Text.Regex.Posix> " org.testng.Hello.world" =~ "(org.testng|sun.java|sun.reflect|java.lang)" :: Bool
False

=>

Prelude Text.Regex.Posix> " sun.java.Hello.world" =~ "(sun.java|org.testng|sun.reflect|java.lang)" :: Bool
False

Prelude Text.Regex.Posix> " sun.java.Hello.world" =~ "(org.testng|sun.java|sun.reflect|java.lang)" :: Bool
True

我是不是做错了什么,因为只检测到来自正则表达式的第二个参数,其余的结果是错误的。

编辑

H:\>ghc --version
The Glorious Glasgow Haskell Compilation System, version 7.8.3

H:\>ghc-pkg list regex-posix
C:/Program Files/Haskell Platform/2014.2.0.0\lib\package.conf.d:
    regex-posix-0.95.2

C:\Users\nixitp\AppData\Roaming\ghc\x86_64-mingw32-7.8.3\package.conf.d:
    (no packages)

EDIT2 第一次 运行 我收到这个警告:

<interactive>: warning: isalpha from msvcrt is linked instead of __imp_isalpha

根据 Haskell Wiki (https://wiki.haskell.org/Regular_expressions#regex-base):

Executive summary: If you want a bug-free and/or portable POSIX extended regular expression library to use from Haskell, then regex-posix will not help you. You should use the regex-tdfa package instead.

尝试使用 http://hackage.haskell.org/package/regex-tdfa 中的 tdfa 正则表达式包。如果你不熟悉安装 Haskell 包(并且你已经安装了 cabal),你可以通过 cabal install regex-tdfa 获得 TDFA 版本。