案例一:

1 <?php 2 3 $str = 'abcdef123456'; 4 preg_match('/[a-z1-9]+/', $str, $res); 5 var_dump($res); 6 7 preg_match('/([a-z1-9])+/', $str, $res); 8 var_dump($res); 9 10 preg_match('/(w)+/', $str, $res); 11 var_dump($res); 12 -------------------------------------------以上3个正则分别输出: 13 array(1) { 14 [0]=> 15 string(12) "abcdef123456" 16 } 17 array(2) { 18 [0]=> 19 string(12) "abcdef123456" 20 [1]=> 21 string(1) "6" 22 } 23 array(2) { 24 [0]=> 25 string(12) "abcdef123456" 26 [1]=> 27 string(1) "6" 28 } 29 ------------------------------------------- 30 31 32 preg_match_all('/[a-z1-9]+/', $str, $res); 33 var_dump($res); 34 35 preg_match_all('/([a-z1-9])+/', $str, $res); 36 var_dump($res); 37 38 preg_match_all('/(w)+/', $str, $res); 39 var_dump($res); 40 -------------------------------------------以上3个正则分别输出 41 array(1) { 42 [0]=> 43 array(1) { 44 [0]=> 45 string(12) "abcdef123456" 46 } 47 } 48 array(2) { 49 [0]=> 50 array(1) { 51 [0]=> 52 string(12) "abcdef123456" 53 } 54 [1]=> 55 array(1) { 56 [0]=> 57 string(1) "6" 58 } 59 } 60 array(2) { 61 [0]=> 62 array(1) { 63 [0]=> 64 string(12) "abcdef123456" 65 } 66 [1]=> 67 array(1) { 68 [0]=> 69 string(1) "6" 70 } 71 } 72 ------------------------------------------- 73 此处拿preg_match 与 preg_match_all 说明 w [] () 不同表达方式下,匹配的结果异同
案例二:

1 <?php 2 3 $str = 'qwe.123.asd.456'; 4 preg_match('/([a-z]+).([1-9]+).([a-z]+).([1-9]+)/', $str, $res); 5 var_dump($res); 6 7 preg_match_all('/([a-z]+).([1-9]+).([a-z]+).([1-9]+)/', $str, $res); 8 var_dump($res); 9 -------------------------分别输出 10 11 array(5) { 12 [0]=> 13 string(15) "qwe.123.asd.456" 14 [1]=> 15 string(3) "qwe" 16 [2]=> 17 string(3) "123" 18 [3]=> 19 string(3) "asd" 20 [4]=> 21 string(3) "456" 22 } 23 array(5) { 24 [0]=> 25 array(1) { 26 [0]=> 27 string(15) "qwe.123.asd.456" 28 } 29 [1]=> 30 array(1) { 31 [0]=> 32 string(3) "qwe" 33 } 34 [2]=> 35 array(1) { 36 [0]=> 37 string(3) "123" 38 } 39 [3]=> 40 array(1) { 41 [0]=> 42 string(3) "asd" 43 } 44 [4]=> 45 array(1) { 46 [0]=> 47 string(3) "456" 48 } 49 } 50 -------------------------- 51 52 53 $str = 'qwe.123.asd.456'; 54 preg_match('/([a-z])+.([1-9])+.([a-z])+.([1-9])+/', $str, $res); 55 var_dump($res); 56 57 preg_match_all('/([a-z])+.([1-9])+.([a-z])+.([1-9])+/', $str, $res); 58 var_dump($res); 59 ------------------------分别输出 60 61 array(5) { 62 [0]=> 63 string(15) "qwe.123.asd.456" 64 [1]=> 65 string(1) "e" 66 [2]=> 67 string(1) "3" 68 [3]=> 69 string(1) "d" 70 [4]=> 71 string(1) "6" 72 } 73 array(5) { 74 [0]=> 75 array(1) { 76 [0]=> 77 string(15) "qwe.123.asd.456" 78 } 79 [1]=> 80 array(1) { 81 [0]=> 82 string(1) "e" 83 } 84 [2]=> 85 array(1) { 86 [0]=> 87 string(1) "3" 88 } 89 [3]=> 90 array(1) { 91 [0]=> 92 string(1) "d" 93 } 94 [4]=> 95 array(1) { 96 [0]=> 97 string(1) "6" 98 } 99 }
上面2个案例,是为更好理解第三个案例.
案例三:
preg_match与preg_match_all区别: 前者匹配成功后就放弃后续匹配; 后者第一次匹配成功后,继续匹配到结尾.
preg_match_all涉及2种匹配方式.官方文档解释如下,int preg_match_all ( string $pattern
, string $subject
[, array &$matches
[, int $flags
= PREG_PATTERN_ORDER
[, int $offset
= 0 ]]] )
PREG_PATTERN_ORDER:
结果排序为
$matches[0]保存完整模式的所有匹配, $matches[1] 保存第一个子组的所有匹配, 以此类推.
PREG_SET_ORDER:
结果排序为$matches[0]包含第一次匹配得到的所有匹配(包含子组), $matches[1]是包含第二次匹配到的所有匹配(包含子组)的数组, 以此类推.

1 <?php 2 3 $str = '111-222;333-444'; 4 preg_match('/([1-9]+)-([1-9]+)/', $str, $res); 5 var_dump($res); 6 7 8 preg_match_all('/([1-9]+)-([1-9]+)/', $str, $res);//默认是PREG_PATTERN_ORDER 方式匹配 9 var_dump($res); 10 11 preg_match_all('/([1-9]+)-([1-9]+)/', $str, $res, PREG_SET_ORDER);//再看PREG_SET_ORDER 方式匹配 12 var_dump($res); 13 ---------------------------------以上3个正则输出 14 15 array(3) { 16 [0]=> 17 string(7) "111-222" 18 [1]=> 19 string(3) "111" 20 [2]=> 21 string(3) "222" 22 } 23 array(3) { 24 [0]=> 25 array(2) { 26 [0]=> 27 string(7) "111-222" 28 [1]=> 29 string(7) "333-444" 30 } 31 [1]=> 32 array(2) { 33 [0]=> 34 string(3) "111" 35 [1]=> 36 string(3) "333" 37 } 38 [2]=> 39 array(2) { 40 [0]=> 41 string(3) "222" 42 [1]=> 43 string(3) "444" 44 } 45 } 46 array(2) { 47 [0]=> 48 array(3) { 49 [0]=> 50 string(7) "111-222" 51 [1]=> 52 string(3) "111" 53 [2]=> 54 string(3) "222" 55 } 56 [1]=> 57 array(3) { 58 [0]=> 59 string(7) "333-444" 60 [1]=> 61 string(3) "333" 62 [2]=> 63 string(3) "444" 64 } 65 }