正則表達式中的貪婪模式和非貪婪模式

正則表達式

我們知道正則表達式中:

  • 點號(.) —> 匹配除換行符之外的任意單個字符
  • 星號(*) —> 匹配0個或多個之前的字符(比如:a*可以匹配0個或多個a)
  • 問號(?) —> 匹配0個或1個之前的字符(比如:a?可以匹配0個或1個a)
  • 點號和星號組合(.*) —> 匹配除換行符之外的所有字符(貪婪模式)
  • 點號、星號和問號組合(.*?) —> 匹配符合條件的最少字符(也即非貪婪模式)

 
這裏分享一個網站regex101,可以方便的查看和測試正則表達式。
 

貪婪模式

貪婪模式
上圖中,正則表達式爲(.*)(\d+).*,測試文本爲"Flink_123.java"。

可以在右下角看到匹配結果:

  • 分組1中,(.*)匹配了儘可能多的字符。
  • 分組2中,雖然(\d+)可以匹配多個數字,但是因爲分組1是貪婪模式,所以(\d+)只匹配了最後一個數字。
     

非貪婪模式

非貪婪模式
上圖中,正則表達式爲(.*?)(\d+).*,測試文本爲"Flink_123.java"。

可以在右下角看到匹配結果:

  • 分組1中,(.*?)匹配了儘可能少的符合條件的字符。
  • 分組2中,(\d+)就匹配了所有數字
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章