2015-06-30 2 views
2

Я пытаюсь использовать регулярное выражение в haskell. но я заметил что-то странное. Я пытаюсь поместить фильтр со строкой, которая может содержать одну из следующих: sun.java, org.testng, sun.reflect, java.lang и т. Д. мое регулярное выражение для этого (sun.java | org.testng | sun .reflect | java.lang), и он отлично работает с regex validator, но когда я делаю это в haskell: ниже приведен результат.Haskell - Regex Странное поведение

=>

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 

я делаю что-то здесь, так как только второго параметра из регулярного выражения детектируется остальное дает ложный результат.

EDIT

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 
+0

Не удалось воспроизвести; Я получаю 'True' для всех четырех запросов. Можете ли вы перечислить версии того, что вы используете? 'ghc --version' и' ghc-pkg list regex-posix' должны делать, хотя позаботьтесь, если вы находитесь в изолированной песочнице или аналогичной. –

+0

Кроме того, вы включили «OverloadedStrings» (или любые другие расширения)? –

+0

отредактировал мой вопрос, и я не уверен, что такое OverloadedStrings. Я новичок в Haskell, как я могу проверить –

ответ

1

Согласно Haskell Wiki (https://wiki.haskell.org/Regular_expressions#regex-base):

Резюме: Если вы хотите ошибку свободной и/или портативного POSIX расширенной библиотеки регулярных выражений для использования с Haskell, то регулярное выражением-POSIX не поможет. Вместо этого вы должны использовать пакет regex-tdfa.

Пробуйте использовать пакет регулярных выражений tdfa от http://hackage.haskell.org/package/regex-tdfa. Если вы не знакомы с установкой пакетов Haskell (и у вас установлена ​​камера), вы можете получить версию TDFA, выполнив cabal install regex-tdfa.

Смежные вопросы