preg_match 与 preg_match_all

案例一:

 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   []  () 不同表达方式下,匹配的结果异同
View Code

案例二:

 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 }
View Code

上面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 }
View Code
原文地址:https://www.cnblogs.com/qunshu/p/3176698.html