2010-03-21 122 views
2

我必須爲某些路徑轉換創建正則表達式。 示例路徑是java正則表達式

//name:value /name:value // name:value 
/name:value /name:value 
/name:value//name:value 

的事情是如何檢查//或/字符串的開始或中間,我怎麼可以指定名稱可以包含任何這樣的-ZA-Z和_

路徑中還包含空格。

回答

4

這應有助於:

String s = "//name:value /name:value // name:value"; 
Pattern p = Pattern.compile("//?\\s*(\\w+):(\\w+)\\s*"); 
Matcher m = p.matcher(s); 
while (m.find()) { 
    System.out.printf("%s = '%s'%n", m.group(1), m.group(2)); 
} 

一些注意事項:

  • 假設的///可以劃定name:value對;
  • ///之後和name:value之後的可選空白被忽略;
  • 拍攝了namevalue。你不會說你想要捕捉什麼。根據需要調整括號;
  • namevalue由A-Z,a-z,0-9或_(這就是\w的含義)組成。

如果你不想找到值,但只是測試的有效性作爲一個整體:

String s = "//name:value /name:value // name:value"; 
if (s.matches("(//?\\s*\\w+:\\w+\\s*)+")) { 
    // it fits 
} 
1

你想archieve什麼exaclty?你只是想檢查一個輸入是否是一個有效的路徑,或者你想提取任何匹配的組進一步轉換?

在任何情況下,將匹配字符串的模式開始/或//和由-ZA-Z的名稱和價值,_是:

(//?\s*[A-Za-z_]+:[A-Za-z_]+\s*)+ 
0

您還可以使用replaceAll來如果它足夠簡單,就進行轉換。

String strings = "//cello:Yo-Yo Ma/violin : Itzhak Perlman"; 
    System.out.println(strings.replaceAll(
     "//?\\s*(\\w+)\\s*:\\s*(.*?)\\s*(?=/|$)", 
     "[$2] on [$1]\n" 
    )); 
    // "[Yo-Yo Ma] on [cello]" 
    // "[Itzhak Perlman] on [violin]"