老师,这个php中匹配结果有问题

老师,这个php中匹配结果有问题

<?php
//定义一个变量,变量中使用模式单元()实现如图效果以https开头以com结尾(使用两种方法,正则中使用http匹配)的正则内容。
$pattern1 = "/(http).*(com)$/";
$pattern2 = "/(http)\B.+(com)/";
//定义一个变量,存放字符串内容,字符串内容中同截图一样。
$subject = "www.demo.com    http://foo.co.uk/
           http://regexr.com/foo.html?q=bar
           https://IMOOC.com";
//使用正则函数给这两个变量相互匹配,并赋值结果给一个变量
$result = preg_match_all($pattern1, $subject, $matches);
//判断赋值的变量,如果匹配成功就输出“匹配成功”字符串,失败则输出“匹配失败”字符串。
if ($result) {
   echo "匹配成功";
} else {
   echo "匹配失败";
}
var_dump($matches);
?>

结果:匹配成功array(3) { [0]=> array(1) { [0]=> string(17) "https://IMOOC.com" } [1]=> array(1) { [0]=> string(4) "http" } [2]=> array(1) { [0]=> string(3) "com" } }


这里结果咋会有三个呢,在regexr.com中都只有一个匹配结果

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,preg_match_all()函数会将搜索 subject 中所有匹配 pattern 给定正则表达式的匹配结果并且将输出到 matches 中。在第一个匹配找到后, 子序列继续从最后一次匹配位置搜索。所以有三个结构。同学可只输出第一个结果。如下所示:

http://img1.sycdn.imooc.com//climg/5ef952d30910976209730245.jpg

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 慕九州8345213 提问者 #1
    我懂了,这里是用()括起来了,所以()的内容有个值,不需要的话用?:去掉,这个结果中的二维数组,官方解释:结果排序为$matches[0]保存完整模式的所有匹配, $matches[1] 保存第一个子组的所有匹配,以此类推
    2020-06-29 11:19:25
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师