我必須爲某些路徑轉換創建正則表達式。 示例路徑是java正則表達式
//name:value /name:value // name:value
/name:value /name:value
/name:value//name:value
的事情是如何檢查//或/字符串的開始或中間,我怎麼可以指定名稱可以包含任何這樣的-ZA-Z和_
路徑中還包含空格。
我必須爲某些路徑轉換創建正則表達式。 示例路徑是java正則表達式
//name:value /name:value // name:value
/name:value /name:value
/name:value//name:value
的事情是如何檢查//或/字符串的開始或中間,我怎麼可以指定名稱可以包含任何這樣的-ZA-Z和_
路徑中還包含空格。
這應有助於:
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
之後的可選空白被忽略;name
和value
。你不會說你想要捕捉什麼。根據需要調整括號;name
和value
由A-Z,a-z,0-9或_(這就是\w
的含義)組成。如果你不想找到值,但只是測試的有效性作爲一個整體:
String s = "//name:value /name:value // name:value";
if (s.matches("(//?\\s*\\w+:\\w+\\s*)+")) {
// it fits
}
你想archieve什麼exaclty?你只是想檢查一個輸入是否是一個有效的路徑,或者你想提取任何匹配的組進一步轉換?
在任何情況下,將匹配字符串的模式開始/或//和由-ZA-Z的名稱和價值,_是:
(//?\s*[A-Za-z_]+:[A-Za-z_]+\s*)+
您還可以使用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]"