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 之後的所有字元...