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

时间:2015-06-30 21:29:03

标签: regex haskell haskell-platform

我正在尝试在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

1 个答案:

答案 0 :(得分:1)

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

  

执行摘要:如果您希望从Haskell使用无错误和/或可移植的POSIX扩展正则表达式库,那么regex-posix将无法帮助您。您应该使用regex-tdfa包。

尝试使用http://hackage.haskell.org/package/regex-tdfa中的tdfa regex包。如果您不熟悉安装Haskell软件包(并且已安装cabal),则可以通过cabal install regex-tdfa获取TDFA版本。