preg_match_all() 和 preg_match()
这个函数乍一看很好用,问题是你有想过其中的数据哪来?比如下面的代码:
<?php
$preg="(\w)(\?)";
$text="1v1?1?v?1";
$result=[];
preg_match_all("@{$preg}@",$text,$result);
其中的返回结果如下:
array (
0 =>
array (
0 => '1?',
1 => '1?',
2 => 'v?',
),
1 =>
array (
0 => '1',
1 => '1',
2 => 'v',
),
2 =>
array (
0 => '?',
1 => '?',
2 => '?',
),
)
其中返回的数据格式为什么是3*3
的?其中各个部分的作用是什么?
$result[0]
返回的是所有匹配到的值,其中的$result[0][0]
,$result[0][1]
等,就是匹配到的值。
然后$result[1]
的正则则是(\w)
,所匹配的文本就是$result[0]
,所以$result[0][0]='1?';
采用正则(\w)
匹配到的结果就是1
,$result[1][1]
,$result[1][2]
都是类似的。
$result[2]
的正则则是(\?)
,同样匹配的文本是$result[0]
,所以所有匹配到的值都是?
。
那么preg_match()
呢?其结果是:
array (
0 => '1?',
1 => '1',
2 => '?',
)
对比$result
其实就是$result[0][0]
,$result[1][0]
,$result[2][0]
。