java - 正则表达式:如何处理空引号

标签 java regex string escaping

我有一个具有以下模式的字符串:

"123 456 789 \"abc def\" \"ghi\" \"jkl\" \"mno\" \"pqr\" stu v 097 \"wx yz\""

我想以这样的方式分割这个字符串:引号外的元素使用“”分割,引号内的元素使用引号分割。我为此目的使用的正则表达式是:

"(['\"])((?:\\\\\\1|.)+?)\\1|([^\\s\"']+)"

生成的输出是:

123, 456, 789, "abc def", "ghi", "jkl", "mno", "pqr", stu, v, 097, "wx yz"

这个输出很好,但问题是如果我有一个空引号,则正则表达式会弄乱输出。例如,让我们从上面的输入字符串中删除 pqr。

"123 456 789 \"abc def\" \"ghi\" \"jkl\" \"mno\" \"\" stu v 097 \"wx yz\""

本例的输出是:

123, 456, 789, "abc def", "ghi", "jkl", "mno", "" stu v 097 ", wx, yz

主要问题是“stu v 097”。所需的输出是:

123, 456, 789, "abc def", "ghi", "jkl", "mno", "", stu, v, 097, "wx yz"

如何通过修改正则表达式来处理空字符串?

最佳答案

这个正则表达式似乎对我有用:

(?:(['"]).*?\1)|(?:[^\s"']+)

作为 Java 字符串,它是:

"(?:(['\"]).*?\\1)|(?:[^\\s\"']+)"

你可以看到它匹配什么here ,只需单击 Java。

关于java - 正则表达式:如何处理空引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34247756/

相关文章:

java - 如何在多线程环境下高效使用 RestTemplate?

Java使用scanner访问数组元素

regex - 从egrep打印输出中排除以空格开头的行

regex - 有谁知道英国日期格式的正则表达式

c# - 使用属性扩展字符串类?

javascript - 如果字段为空则跳过

java - 如何使用 for 循环使用键集迭代 HashMap

regex - Linux bash 中文件名中的时间戳匹配正则表达式的问题

java - 如何按字典顺序排列子串

java - 使用 Apache Shiro 设置自定义分布式缓存管理器?