我如何组合一个正则表达式来拆分一个用分号分隔条件的 fiql 字符串(下面的示例)。问题是分号也可以在字符串中。
我正在使用字符串拆分,但找不到正确的正则表达式。我在下面尝试过在 == 之前尝试获取最后一个分号:
query.split("(;)[^;]*==)
但它只适用于第一个键值。
示例字符串:
Key1==value1; key2==val;ue2;key3==value3
目标是数组或列表:key1==value1, key2==val;ue2, key3==value3
这里的问题是值 2 中的分号导致了拆分。
有什么想法吗?
最佳答案
看起来你想在 ;
上拆分,前提是它后面有 ==
,但它和之间没有 ;
==
。
您几乎知道了。你的代码应该是这样的
split(";(?=[^;]*==)")
注意 (?=...)
部分是 positive look-ahead ,它只是检查 ;
之后是否存在可以通过子表达式 [^;]*==
匹配的部分,但最终匹配中不包含该部分,因此它赢了' 拆分后消失(即 zero-length 匹配)。
演示:
String str = "Key1==value1; key2==val;ue2;key3==value3";
for (String s : str.split(";(?=[^;]*==)")){
System.out.println(s);
}
输出:
Key1==value1
key2==val;ue2
key3==value3
如果您还想去掉 key2
之前的空格,则将其作为要拆分的分隔符的一部分。因此,让正则表达式不仅匹配 ;
还匹配它周围的空格。零个或多个空格可以用 \s*
表示,因此您的代码看起来像
split("\\s*;\\s*(?=[^;]*==)")
关于java - 字符串正则表达式解析数据中的分号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39771801/