正則表達式
我們知道正則表達式中:
- 點號(.) —> 匹配除換行符之外的任意單個字符
- 星號(*) —> 匹配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+)就匹配了所有數字