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

Java 正则表达式:如何处理空引号,java,regex,string,escaping,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",

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

"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\"']+)"

您可以看到它匹配的内容,只需单击Java。

您的表达式是正确的。要获得所需的输出,只需替换
*
上的
+

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

请注意,
+
表示一次或多次。但您可以得到像“.”这样的空引号。因此,我们需要零次或多次-
*

昨天当我考虑您的问题时。我想到了这一点。这似乎是另一种方式。或者可能不是

((\"[\w\s]*\")|(\d+|\w+))
作为java字符串

((\"[\\w\\s]*\")|(\\d+|\\w+))