[英]Java regex multiple matches
我有以下Java代碼段:
Pattern pattern = Pattern.compile("\\$\\{.+\\}");
String str = "str1/${com.test.p1}/str2/${com.test.p2}str3";
int start = 0;
Matcher m = pattern.matcher(str);
while (m.find(start)) {
System.out.println(m.start());
System.out.println(m.end());
start = m.end();
}
我想做的是提取方括號(com.test.p1和com.test.p2)中的字符串。 但是,執行代碼時,輸出如下:
5
47
,這意味着該模式與整個序列匹配:
${com.test.p1}/str2/${com.test.p2}
最有可能發生這種情況是因為正則表達式有點貪婪,並且消耗了所有輸入,直到到達最后一個結束括號為止。 在沒有固定編號的情況下,如何重寫模式,使其與所有這些區域匹配?
用以下代碼替換代碼的第一行:
Pattern pattern = Pattern.compile("[a-z0-9]+\\.[a-z0-9]+\\.[a-z0-9]+");
此模式將提取兩個字符串com.test.p1
和com.test.p2
。 代碼的結果將是:
7
18
27
38
對於以后的正則表達式測試,我建議https://regexr.com/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.