Haskell正则表达式否定表达式

时间:2013-08-18 21:11:41

标签: regex haskell pcre

如何实现反向匹配,例如

 getAllTextMatches $ "foobar  bar    bl   a" =~ pattern :: [String]

会产生一个不是多个空格的字符串列表。

我试过

getAllTextMatches $ "foobar  bar    bl   a" =~ "(\\s\\s+)" :: [String]

按预期返回此列表:[" "," "," "]

现在我尝试用以下方式否定表达式

getAllTextMatches $ "foobar  bar    bl   a" =~ "(?!\\s\\s+)" :: [String]

返回[""] 而我想收到这个:

["foobar", "bar", "bl", "a"]

或者作为另一个例子而

getAllTextMatches $ "foobar /* bla */ bar bl a" =~ "/\\*[^*]*\\*/" :: [String] 

返回["/* bla */"]

我想通过否定["foobar "," bar bl a"]

来接收:"/\\*[^*]*\\*/"

1 个答案:

答案 0 :(得分:1)

您正在寻找的是分裂:

将您的字符串与原始图案分开,您将获得所需的内容。

OR

你可以尝试匹配:

(?>\\s\\s+\\K|^)(?>\\S|\\s(?!\\s+))++

(?>/\\*[^*]*\\*/\\K|^)(?>[^/]++|/(?!\\*[^*]*\\*/))++

其中\K是一个重置比赛开始的pcre功能。