我想使用空格和单引号拆分字符串。但是应该忽略两个单引号。
输入:
name eq 'a''b'
输出应为:
name
eq
a''b
我尝试使用
[^\\s\"(?<!')'(?!')]+|\"[^\"]*\"|(?<!')'(?!')[^(?<!')'(?!')]*(?<!')'(?!')"
但它不起作用。
答案 0 :(得分:3)
以下内容应符合您的需求:
'(?:[^']|'')+'|[^ ]+
Java示例:
String input = "foobar foo bar 'foobar' 'foo bar' 'foo''bar'";
Pattern pattern = Pattern.compile("'(?:[^']|'')+'|[^ ]+");
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
String match = matcher.group();
System.out.println(match);
}
答案 1 :(得分:1)
嗨,实际的正则表达式是
"\\s|(?<!')'(?!')"
它产生如下输出数组
[name, eq, , a''b]
答案 2 :(得分:0)
这也可以在没有regex
的情况下完成。
String s = "name eq 'a''b'";
String[] split = new String[3];
Scanner in = new Scanner(s);
split[0] = in.next();
split[1] = in.next();
String temp = in.next();
split[2] = temp.substring(1,temp.length() - 1);
//test output
for(String x : split)
System.out.println(x);
这将打印:
name
eq
a''b
如果您需要更通用的解决方案,则需要提供更多详细信息。
希望这会有所帮助。
答案 3 :(得分:0)
我将如何做:
String value = "name eq 'a''b'";
value = value.replaceAll(" '", " ").replaceAll("'$", "");
System.out.println(value);
String[] arr = value.split(" ");
答案 4 :(得分:0)
您可以尝试使用Lookaround
模式
(?<!')'(?!')
示例代码:
System.out.println(Arrays.toString("name eq 'a''b'".split("(?<!')'(?!')")));
输出:
[name eq , a''b]
模式说明:
(?<! look behind to see if there is not:
' '\''
) end of look-behind
' '\''
(?! look ahead to see if there is not:
' '\''
) end of look-ahead
根据空格或单引号进行拆分
*(?<!')[ '](?!') *
示例代码:
System.out.println(Arrays.toString("name eq 'a''b'".split(" *(?<!')[ '](?!') *")));
输出:
[name, eq, a''b]