1

我怎样才能实现反向匹配,例如

 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"]通过否定"/\\*[^*]*\\*/"

4

1 回答 1

1

您正在寻找的是拆分:

用你原来的模式分割你的字符串,你会得到你想要的。

或者

你可以尝试匹配:

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

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

哪里\K是重置比赛开始的pcre功能。

于 2013-08-18T21:56:52.267 回答