php正则表达式 全局查找,PHP preg_match_all():执行全局正则表达式匹配

PHP preg_match_all() 函数和 preg_match() 函数相似,主要有两点不同:

第一个不同是后者在第一次匹配成功后将会停止搜索,而前者则会一直搜索匹配到目标字符串的结尾处;

另一个不同是 preg_match_all() 的 flags 参数可设置为 PREG_PATTERN_ORDER、PREG_SET_ORDER 或 PREG_OFFSET_CAPTURE。

若 flags 设置为 PREG_PATTERN_ORDER(这也是默认值),则结果排序为 $matches[0] 保存完整模式的所有匹配,$matches[1] 保存第一个子组的所有匹配,以此类推。

若 flags 设置为 PREG_SET_ORDER,则结果排序为 $matches[0] 包含第一次匹配得到的所有匹配(包含子组),$matches[1] 是包含第二次匹配到的所有匹配(包含子组)的数组,以此类推。

当 flags 的值被设置为 PREG_OFFSET_CAPTURE 时,每个发现的匹配返回时会增加它相对目标字符串的偏移量。

注意,这会改变 matches 中的每一个匹配结果字符串元素,使其成为一个第 0 个元素为匹配结果字符串、第 1 个元素为匹配结果字符串在 subject 中的偏移量。

preg_match_all() 函数的使用示例如下:

<?php echo "

";  $subject = "abcdefghijkdefabcedfdefxyzdef";  $pattern_1 = '/(def)(abc)/';  $num_1 = preg_match_all($pattern_1, $subject, $matches_1,PREG_PATTERN_ORDER);  var_dump($matches_1);  var_dump($num_1);  $pattern_2 = '/(def)(abc)/';  $num_2 = preg_match_all($pattern_2, $subject, $matches_2,PREG_OFFSET_CAPTURE, 3);  var_dump($matches_2);  var_dump($num_2);  ?>

执行以上程序的结果如下:

array(3) {

[0]=>array(1)

{

[0]=>string(6) "defabc"

}

[1]=>array(1)

{

[0]=>string(3) "def"

}

[2]=>array(1)

{

[0]=>string(3) "abc"

}

}

int(1)

array(3) {

[0]=>array(1)

{

[0]=>array(2)

{

[0]=>string(6) "defabc"

[1]=>int(11)

}

}

[1]=>array(1)

{

[0]=>array(2)

{

[0]=>string(3) "def"

[1]=>int(11)

}

}

[2]=>array(1)

{

[0]=>array(2)

{

[0]=>string(3) "abc"

[1]=>int(14)

}

}

}

int(1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值