在java中基于空格分割一个字符串,用双引号和单引号转义那些空格以及前面带\

Sri*_*har 6 java regex string

我对正则表达式完全不熟悉.我正在尝试将一个表达式放在一起,该表达式将使用未被单引号或双引号括起的所有空格拆分示例字符串,并且前面没有'\'

例如:-

He is a "man of his" words\ always
Run Code Online (Sandbox Code Playgroud)

必须拆分为

He
is 
a 
"man of his"
words\ always
Run Code Online (Sandbox Code Playgroud)

我明白

List<String> matchList = new ArrayList<String>();
Pattern regex = Pattern.compile("[^\\s\"']+|\"[^\"]*\"|'[^']*'");
Matcher regexMatcher = regex.matcher(StringToBeMatched);
while (regexMatcher.find()) {
    matchList.add(regexMatcher.group());
}
Run Code Online (Sandbox Code Playgroud)

l使用未被单引号或双引号括起的所有空格拆分示例字符串

如果前面有一个\ _,那么如何合并忽略空白区域的第三个条件?

anu*_*ava 3

您可以使用这个正则表达式:

((["']).*?\2|(?:[^\\ ]+\\\s+)+[^\\ ]+|\S+)
Run Code Online (Sandbox Code Playgroud)

正则表达式演示

在爪哇中:

Pattern regex = Pattern.compile ( 
"(([\"']).*?\\2|(?:[^\\\\ ]+\\\\\\s+)+[^\\\\ ]+|\\S+)" );
Run Code Online (Sandbox Code Playgroud)

解释:

这个正则表达式适用于交替:

  1. 第一个匹配([\"']).*?\\2任何带引号的(双或单)字符串。
  2. 然后匹配(?:[^\\ ]+\\\s+)+[^\\ ]+以匹配带有转义空格的任何字符串。
  3. 最后 用于\S+匹配任何不带空格的单词。