亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

([^}]*?)這個正則是什么意思

([^}]*?)這個正則是什么意思

慕的地6264312 2019-03-05 13:11:56
如題 我始終看不懂上面的是什么意思 求大牛解答
查看完整描述

3 回答

?
慕勒3428872

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、正則表達式是一個很強大的工具,工作中經常用到


查看完整回答
反對 回復 2019-04-26
?
海綿寶寶撒

TA貢獻1809條經驗 獲得超8個贊

結論來講,就是匹配以非}開頭的任意字符串。

具體來講,應該用在比如取函數體的內容
[code="java"]
void Function {
var i = 0;
i++;
}
[/code]

比如上面的代碼中第1,2,3行都可以匹配上。
通常第1行會用另個表達式匹配。

([^}]*?)

[^}] —— 不是以}開頭的。

  • —— 任意次數。 ? —— 非貪婪模式。


查看完整回答
反對 回復 2019-04-26
?
子衿沉夜

TA貢獻1828條經驗 獲得超3個贊

[^}]這個是匹配字符串內非}的字符串,[^}]*這個就等于字符串內非}的字符出現n次或者不出現


查看完整回答
反對 回復 2019-04-26
  • 3 回答
  • 0 關注
  • 3028 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號