如何实现反向匹配,例如
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"]
"/\\*[^*]*\\*/"
答案 0 :(得分:1)
您正在寻找的是分裂:
将您的字符串与原始图案分开,您将获得所需的内容。
OR
你可以尝试匹配:
(?>\\s\\s+\\K|^)(?>\\S|\\s(?!\\s+))++
和
(?>/\\*[^*]*\\*/\\K|^)(?>[^/]++|/(?!\\*[^*]*\\*/))++
其中\K
是一个重置比赛开始的pcre功能。