3 回答

TA貢獻1848條經驗 獲得超6個贊
/**
* [ab}]表示匹配a或b或}
* [^ab}]表示不匹配a或b或}
* [ab}]*表示一個字符串由a或b或}組成 表示之前出現零次或多次 默認是貪婪模式(最長匹配)
* *? 表示非貪婪模式(最短匹配,即惰性模式)
* (a)(b) 括號是分組 第0個分組是整個匹配的字符串,第1個是a 第二個是2以此類推
*
*
*/
Pattern greedyPattern = Pattern.compile("([^}])");//貪婪
Pattern reluctantPattern = Pattern.compile("([^}]*?)");//非貪婪
String str1 = "abc"; String str2 = "abc}"; System.out.println(greedyPattern.matcher(str1).matches());//true System.out.println(greedyPattern.matcher(str2).matches());//false 因為包含} System.out.println(reluctantPattern.matcher(str1).matches());//true System.out.println(reluctantPattern.matcher(str2).matches());//false
([^}]*?) 詳細解釋:
1、()表示捕獲組,可以通過如下語句捕獲組:
while(mathcer.find()) {
System.out.println(greedyMathcer.group(1));
}
第0個分組是整個匹配的,第一個分組是第一個() 第二個分組是第二個()
2、[^}] 表示非}字符都是合法的
3、*表示0個或多個 [^}]* 表示只要字符串中沒有}即可
4、*? 表示一種非貪婪算法(默認如.*是貪婪 即最長匹配),是最短匹配;
5、([^}]*?) 表示只要字符串中沒有}即可,而且捕獲組是最短匹配;
7、建議看下《精通正則表達式》 上邊對于貪婪 非貪婪 捕獲組等概念講的很詳細
8、正則表達式是一個很強大的工具,工作中經常用到

TA貢獻1809條經驗 獲得超8個贊
結論來講,就是匹配以非}開頭的任意字符串。
具體來講,應該用在比如取函數體的內容
[code="java"]
void Function {
var i = 0;
i++;
}
[/code]
比如上面的代碼中第1,2,3行都可以匹配上。
通常第1行會用另個表達式匹配。
([^}]*?)
[^}] —— 不是以}開頭的。
—— 任意次數。 ? —— 非貪婪模式。
添加回答
舉報