Java 中不包含闭花括号的正则表达式

Regex for not including the contain of a closed curly braces in Java

请在java中帮我解决这个问题。

input string = <V2>UTM_Source:google|UTM_Medium:cpc|UTM_Campaign:{Core|IN|Desktop|BMM|Top Cities|TS}|
UTM_Content:{Compare Car Insurance}|UTM_Term:

我想用“|”拆分但不是花括号的内部包含 所以输出将是:

<V2>UTM_Source:google
UTM_Medium:cpc
UTM_Campaign:{Core|IN|Desktop|BMM|Top Cities|TS}
UTM_Content:{Compare Car Insurance}
UTM_Term:

提前致谢。

所以基本上,您想同时匹配 entire {...} 序列,或者换句话说,将它们视为常规中的单个字符表达式:\{.*?\} 使用这个片段作为与单个 "regular non pipe" 字符交替的第一选择,然后让整个事情重复,我们避免大括号内的虚假匹配:

((?:\{.*?\}|[^|])+)\|

或者正如 Sven 指出的那样,您甚至不需要最后一个 |或捕获组:

(?:\{.*?\}|[^|])+

demo