java - 字符串正则表达式解析数据中的分号

标签 java regex string

我如何组合一个正则表达式来拆分一个用分号分隔条件的 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/

相关文章:

c++将字符串参数分配给字符串

python - 元组列表(从元组中删除特殊项目)

java - 如何为实体的 ID/名称生成随机字符串而不是数字?

java - 如何选择表中最后插入的行?

java - 基于逗号的拆分的正则表达式忽略引号内的逗号

python - 使用 python 从网站中仅提取 'strong' 标题后的要点

java - 如何转义xml中的<和≤符号?

java - 如何提高不属于您的代码的性能?

java - 将图像加载到 ImageView JavaFX

php - filter_var 与 preg_match