我创建了一个完美的正则表达式模式,但我无法在Java中使用它:
(\\"|[^" ])+|"(\\"|[^"])*"
适用于
robocopy "C:\test" "C:\test2" /R:0 /MIR /NP
给出(应该如此)
[0] => robocopy
[1] => "C:\test"
[2] => "C:\test2"
[3] => /R:0
[4] => /MIR
[5] => /NP
根据{{3}} ,在第0组中
现在,我如何在Java中获得这6个值? 我试过了
Pattern p = Pattern.compile(" (\\\"|[^\" ])+ | \"(\\\"|[^\"])*\" ");
Matcher m = p.matcher(command);
System.out.println(m.matches()); // returns false
但该模式甚至根本不匹配任何东西?
更新 最初的perl正则表达式是:
(\\"|[^" ])+|"(\\"|[^"])*"
答案 0 :(得分:2)
matches()
方法将整个字符串与正则表达式匹配 - 仅当整个字符串匹配时才返回true
您要找的是find()
方法,并使用group()
方法获取子字符串。
通常通过迭代来完成:
while (m.find()) {
.... = m.group();
//post processing
}
答案 1 :(得分:2)
由于regexp字符串在进入regexp处理器之前首先由编译器处理,因此需要将表达式中的每个backslah加倍,并为每个doublequote添加额外的斜杠。
Pattern p = Pattern.compile("(\\\\\"|[^\" ])+|\"(\\\\\"|[^\"])*\"");
答案 2 :(得分:0)
matches()
尝试匹配整个字符串上的模式。您应该使用匹配器对象的find()
方法。
所以解决方案是:
System.out.println(m.find());