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 指出的那样,您甚至不需要最后一个 |或捕获组:
(?:\{.*?\}|[^|])+
请在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 指出的那样,您甚至不需要最后一个 |或捕获组:
(?:\{.*?\}|[^|])+