我试图用 + = == <= >= != || 来打破标记中的字符串{ } 当它们出现在双引号之外时。但它是通过单次出现 | 进行标记化的。 < >!。那不是必需的。那么该如何处理呢?
String line1= "sa2dvf=s||a|df&&v<gdsf==ds!gv!=fdgv\"fvdsvg=kjhbhbj==\"";
String regex = "[\\{\\}+={!=}{<=}{>=}{||}](?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)";
String[] tokens = line1.split(regex, -1);
for(String val : tokens) {
System.out.println(val);
}
它的输出是:
sa2dvf
s
a
df&&v
gdsf
ds
gv
fdgv"fvdsvg=kjhbhbj=="
但需要的是:
sa2dvf
s
a|df&&v<gdsf
ds!gv
fdgv"fvdsvg=kjhbhbj=="
最佳答案
您可以使用此前瞻正则表达式进行拆分:
String[] arr = str.split("(?:[<>=!]=|\\|\\||[+=\\{}])(?=(?:(?:[^\"]*\"){2})*[^\"]*$)");
正则表达式分解:
-
(?:[<>=!]=|\\|\\||[+=\\{}])
:匹配我们想要拆分的运算符之一 -
(?:[^"]*"){2}
找到一对引号 -
(?:(?:[^"]*"){2})*
查找 0 个或多对引号 -
[^"]*$
确保在上次匹配的报价之后我们不再有任何报价 所以(?=...)
断言前面有偶数个引号,因此仅匹配带引号的字符串之外的符号。
关于java - 关于正则表达式中字符的恰好 n 次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48224940/