preg_match_all() 函数,搜索 subject 中所有匹配 pattern 给定正则表达式的匹配结果并且将它们以 flag 指定顺序输出到 matches 中。在第一个匹配找到后, 子序列继续从最后一次匹配位置搜索。
了解下PHP函数preg_match_all()的使用方法,在做开发的时候会用到,能不能熟练掌握这个函数还需要平时在项目中多练,或者工作之余了解并实战,以便加深印象,以及给出一些案例解释。
preg_match_all() 函数
执行全局正则表达式匹配
支持版本:
(PHP 4, PHP 5, PHP 7)
__sleep()定义以及用法:
int preg_match_all ($pattern, $subject, $matches, $flags, $offset)
搜索subject中所有匹配pattern给定正则表达式 的匹配结果并且将它们以flag指定顺序输出到matches中。在第一个匹配找到后, 子序列继续从最后一次匹配位置搜索。
preg_match_all()参数解释:
参数 | 描述 |
---|---|
pattern | 要搜索的模式,字符串形式。 |
subject | 输入字符串。 |
matches | 多维数组,作为输出参数输出所有匹配结果, 数组排序通过flags指定。 |
flags | 可以结合下面标记使用(注意不能同时使用PREG_PATTERN_ORDER和 PREG_SET_ORDER): |
PREG_PATTERN_ORDER | 结果排序为$matches[0]保存完整模式的所有匹配, $matches[1] 保存第一个子组的所有匹配,以此类推。 |
flags标记
标记 | 描述 |
---|---|
PREG_PATTERN_ORDER | 结果排序为$matches[0]保存完整模式的所有匹配, $matches[1] 保存第一个子组的所有匹配,以此类推。 |
PREG_SET_ORDER | 结果排序为$matches[0]包含第一次匹配得到的所有匹配(包含子组), $matches[1]是包含第二次匹配到的所有匹配(包含子组)的数组,以此类推。 |
PREG_OFFSET_CAPTURE | 如果这个标记被传递,每个发现的匹配返回时会增加它相对目标字符串的字节偏移量。 注意这会改变matches中的每一个匹配结果字符串元素,使其 成为一个第0个元素为匹配结果字符串,第1个元素为 匹配结果字符串在subject中的偏移量。 |
PREG_UNMATCHED_AS_NULL | 传入此标记,未匹配的子组报告为 null;否则会是空 string。 |
offset | 通常, 查找时从目标字符串的开始位置开始。可选参数offset用于 从目标字符串中指定位置开始搜索(单位是字节)。 |
如果没有给定排序标记,假定设置为PREG_PATTERN_ORDER。
preg_match_all()返回值
返回完整匹配次数(可能是0),或者如果发生错误返回false。
演示代码:
在HTML标签中查找匹配a标签,以及a标签中的属性以及内容等:
以下preg_match_all的示例,可以依照案例测试其他参数。
$siteInfo = "编程网站,福星之吧,编程之吧网址:<a href= 'fxzbcn.com' title='学习编程' alt='学习编程网址链接'>fxzbcn.com</a><a href='fxzbcn.com' title='学习编程网站'>欢迎到编程之吧学习编程!</a>";
$list = array(); //这里存放结果
$result_a = preg_match_all ("/<a(.*)>(.*)<\/a>/U", $siteInfo, $array); // 匹配出所有的a标签
var_dump($array);
array(3) {
[0]=>
array(2) {
[0]=>
string(88) "<a href= 'fxzbcn.com' title='学习编程' alt='学习编程网址链接'>fxzbcn.com</a>"
[1]=>
string(88) "<a href='fxzbcn.com' title='学习编程网站'>欢迎到编程之吧学习编程!</a>"
}
[1]=>
array(2) {
[0]=>
string(71) " href= 'fxzbcn.com' title='学习编程' alt='学习编程网址链接'"
[1]=>
string(45) " href='fxzbcn.com' title='学习编程网站'"
}
[2]=>
array(2) {
[0]=>
string(10) "fxzbcn.com"
[1]=>
string(36) "欢迎到编程之吧学习编程!"
}
}
for($i=0; $i<$result_a; $i++) { //对所有的a标签进行取属性
$result_a_attr = preg_match_all('/(\w+)\s*=\s*(?:(?:(["\'])(.*?)(?=\2))|([^\/\s]*))/', $array[0][$i], $arr); //匹配出所有的属性
var_dump($array);
array(5) {
[0]=>
array(3) {
[0]=>
string(17) "href= 'fxzbcn.com"
[1]=>
string(19) "title='学习编程"
[2]=>
string(29) "alt='学习编程网址链接"
}
[1]=>
array(3) {
[0]=>
string(4) "href"
[1]=>
string(5) "title"
[2]=>
string(3) "alt"
}
[2]=>
array(3) {
[0]=>
string(1) "'"
[1]=>
string(1) "'"
[2]=>
string(1) "'"
}
[3]=>
array(3) {
[0]=>
string(10) "fxzbcn.com"
[1]=>
string(12) "学习编程"
[2]=>
string(24) "学习编程网址链接"
}
[4]=>
array(3) {
[0]=>
string(0) ""
[1]=>
string(0) ""
[2]=>
string(0) ""
}
}
for($j=0; $j<$result_a_attr; $j++) { //将匹配完的结果进行结构重组
$list[$i][$arr[1][$j]] = !empty($arr[4][$j]) ? $arr[4][$j] : $arr[3][$j];
}
}
var_dump($list);
array(2) {
[0]=>
array(3) {
["href"]=>
string(10) "fxzbcn.com"
["title"]=>
string(12) "学习编程"
["alt"]=>
string(24) "学习编程网址链接"
}
[1]=>
array(2) {
["href"]=>
string(10) "fxzbcn.com"
["title"]=>
string(18) "学习编程网站"
}
}
转载注明:
感谢博主,喝杯咖啡~
感谢博主,喝杯咖啡~
还没有人发表评论