正規表示式, 貪婪模式

2022-03-13 12:23:07 字數 1076 閱讀 6179

2018-2-28 10:15:09 星期三

好幾年沒怎麼用過正則了, 正則有乙個常見的用法就是非貪婪模式

方法一:

? 在 . + 和 * 之後 表示非貪婪匹配;

*、+限定符都是貪婪的,因為它們會盡可能多的匹配文字,只有在它們的後面加上乙個?就可以實現非貪婪或最小匹配。

這和 ? 本身代表0次或1次的限制有關

.除了換行符外的任意字元(可用修飾符/s使之匹配換行符)

.*匹配0個或多個任意字元

.+匹配1個或多個任意字元

.?匹配0個或1個任意字元

a匹配連續出現的2個a

a匹配連續出現的2個或3個a

a匹配連續出現2個以上的所有a

方法二:

新增模式修飾符: u

舉例(php): 

1

$a = 'aaaa0123456789';23

preg_match('#(\d+)#', $a, $match); print_r($match

); //貪婪匹配, 匹配盡可能多的數字

4preg_match('#(\d+?)#', $a, $match); print_r($match

); //非貪婪匹配, 最多隻匹配乙個數字

5preg_match('#(\d+)#u', $a, $match); print_r($match); //非貪婪匹配, 最多隻匹配乙個數字

結果:

1

//第3行匹配結果

2array3(

4 [0] => 0123456789

5 [1] => 01234567896)

78//第4行匹配結果

9array10(

11 [0] => 0

12 [1] => 013)

1415

//第5行匹配結果

16array17(

18 [0] => 0

19 [1] => 0

20 )

正規表示式貪婪模式

貪婪匹配與非貪婪匹配 貪婪匹配 預設情況下,正規表示式使用最長匹配原則 也叫貪婪匹配原則 例如 要將 zoom 中匹配 zo?的部 分替換成 r 替換的的結果是 rom 如果要將 zoom 中匹配 zo 的部分替換成 r 替換後的結果是 rm 非貪婪匹配 當字元?緊隨其他限定符 之後時,匹配模式變成...

正規表示式 貪婪非貪婪模式

貪婪與非貪婪模式影響的是被量詞修飾的子表示式的匹配行為,貪婪模式在整個表示式匹配成功的前提下,盡可能多的匹配,而非貪婪模式在整個表示式匹配成功的前提下,盡可能少的匹配。非貪婪模式只被部分nfa引擎所支援。1.舉乙個例子 string str abcaxc patter p ab.c 貪婪匹配 正規表...

正規表示式 之貪婪模式

直觀上是盡可能多的匹配字元 在使用修飾匹配次數的特殊符號時,有幾種表示方法可以使同乙個表示式能夠匹配不同的次數,比如 具體匹配的次數隨被匹配的字串而定。這種重複匹配不定次數的表示式在匹配過程中,總是盡可能多的匹配。比如,針對文字 d d d 舉例如下 d w 中 w 將匹配第乙個 d 之後的所有字元...