簡體   English   中英

在Java中使用正則表達式模式

[英]Using regex pattern in Java

我創建了一個完美的正則表達式模式,但我無法在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

根據http://myregextester.com/index.php在0組中

現在,我如何在Java中獲得這6個值? 我試過了

Pattern p = Pattern.compile("   (\\\"|[^\" ])+  |  \"(\\\"|[^\"])*\"   "); 
Matcher m = p.matcher(command);

System.out.println(m.matches()); // returns false

但這種模式甚至根本不匹配任何東西?

更新原始的perl正則表達式是:

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

matches()方法將整個字符串與正則表達式匹配 - 只有在整個字符串匹配時才返回true

您正在尋找的是find()方法,並使用group()方法獲取子字符串。

通常通過迭代來完成:

while (m.find()) { 
  .... = m.group();
  //post processing
}

由於regexp字符串在進入regexp處理器之前首先由編譯器處理,因此需要將表達式中的每個backslah加倍,並為每個doublequote添加額外的斜杠。

 Pattern p = Pattern.compile("(\\\\\"|[^\" ])+|\"(\\\\\"|[^\"])*\""); 

matches()嘗試匹配整個字符串上的模式。 您應該為您的案例使用Matcher對象的find()方法。

所以解決方案是:

System.out.println(m.find());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM