簡體   English   中英

Java正則表達式多個匹配項

[英]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}

最有可能發生這種情況是因為正則表達式有點貪婪,並且消耗了所有輸入,直到到達最后一個結束括號為止。 在沒有固定編號的情況下,如何重寫模式,使其與所有這些區域匹配?

正如anubhava回答的那樣 ,您必須使正則表達式變得懶惰

\$\{.+?\}

這里是regex的工作版本: regexr.com ,順便說一下,它是編寫/測試和理解regex的好地方:)

用以下代碼替換代碼的第一行:

Pattern pattern = Pattern.compile("[a-z0-9]+\\.[a-z0-9]+\\.[a-z0-9]+");

此模式將提取兩個字符串com.test.p1com.test.p2 代碼的結果將是:

7
18
27
38

對於以后的正則表達式測試,我建議https://regexr.com/

暫無
暫無

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

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