Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java-Regex使用空格分割字符串,但不考虑双引号或单引号_Java_Regex_Split_Regex Greedy - Fatal编程技术网

java-Regex使用空格分割字符串,但不考虑双引号或单引号

java-Regex使用空格分割字符串,但不考虑双引号或单引号,java,regex,split,regex-greedy,Java,Regex,Split,Regex Greedy,我想使用空格分割字符串,但不考虑双引号或单引号 我试着使用它,但在某些情况下失败了 Input : It is a "beautiful day"'but i' cannot "see it" 输出应该是 It is a "beautiful day"'but i' cannot "see it" 上面链接中的正则表达式导致 It is a "beautiful day" 'but i' cannot "see it" 我想说“美好的一天”,但我只想说一句话 有人能帮我写正确的正则表达式吗

我想使用空格分割字符串,但不考虑双引号或单引号

我试着使用它,但在某些情况下失败了

Input : It is a "beautiful day"'but i' cannot "see it"
输出应该是

It
is
a
"beautiful day"'but i'
cannot
"see it"
上面链接中的正则表达式导致

It
is
a
"beautiful day"
'but i'
cannot
"see it"
我想说“美好的一天”,但我只想说一句话


有人能帮我写正确的正则表达式吗?

这个正则表达式通过了你的测试:

" (?=(([^'\"]*['\"]){2})*[^'\"]*$)"
它在一个空格上进行拆分,但只有当空格不在引号内时才进行拆分,它通过使用前瞻性断言空格后面有偶数个引号来测试引号

有一些边缘情况下,这将不适用,但如果您的输入是“格式良好”(即引号是平衡的),这将为您工作。如果报价不平衡,它仍然是可行的-您需要使用两个look aheads-每个报价类型一个


下面是一些测试代码:

String s = "It is a \"beautiful day\"'but i' cannot \"see it\"";
String[] parts = s.split(" (?=(([^'\"]*['\"]){2})*[^'\"]*$)");
for (String part : parts)
    System.out.println(part);
输出:

It
is
a
"beautiful day"'but i'
cannot
"see it"

当我将字符串修改为“美丽的一天”时,它是“美丽的一天”,但我“看不见”。它失败了。你能解释一下它是如何工作的吗?请告诉我这个新字符串的“成功”是什么样子的。所需的输出就像“美丽的一天”但我“失败了”。但我得到了“美好的一天”但我不能“在连续的队列中,您的拆分规则是什么?我不太清楚您的意思。但就我所知,我使用了你给出的用于拆分的正则表达式规则。我想用空格分割字符串,空格不应该在双引号或单引号之间。我希望你的问题能回答我。如果您需要任何澄清,我随时准备提供。请帮我渡过难关