在Java中使用正则表达式模式

时间:2012-08-26 13:15:41

标签: java regex

我创建了一个完美的正则表达式模式,但我无法在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正则表达式是:

(\\"|[^" ])+|"(\\"|[^"])*"

3 个答案:

答案 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());