章节
问答
课签
笔记
评论
占位
占位

查找所有匹配结果

preg_match只能匹配一次结果,但很多时候我们需要匹配所有的结果,preg_match_all可以循环获取一个列表的匹配结果数组。

$p = "|<[^>]+>(.*?)</[^>]+>|i";
$str = "<b>example: </b><div align=left>this is a test</div>";
preg_match_all($p, $str, $matches);
print_r($matches);

可以使用preg_match_all匹配一个表格中的数据:

$p = "/<tr><td>(.*?)<\/td>\s*<td>(.*?)<\/td>\s*<\/tr>/i";
$str = "<table> <tr><td>Eric</td><td>25</td></tr> <tr><td>John</td><td>26</td></tr> </table>";
preg_match_all($p, $str, $matches);
print_r($matches);

$matches结果排序为$matches[0]保存完整模式的所有匹配, $matches[1] 保存第一个子组的所有匹配,以此类推。

任务

使用preg_match_all匹配所有li标签中的数据。

?不会了怎么办

在代码区补充以下代码:

$p = "/<li>(.*)<\/li>/i";//解释下这个正则://后面的i表示不区分大小写,<li>(.*?)<\/li>表示li标签内的匹配的()内的值有多少,括号内的.表示所有单字符,*表示数量为0个或者多个。也就是li标签内有字符就显示出来
preg_match_all($p, $str, $matches);
print_r($matches[1]);
||
1
2
<?php
$str = "<ul>
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
提交
重置代码
||

请验证,完成请求

由于请求次数过多,请先验证,完成再次请求

加群二维码

打开微信扫码自动绑定

您还未绑定服务号

绑定后可得到

  • · 粉丝专属优惠福利
  • · 大咖直播交流干货
  • · 课程更新,问题答复提醒
  • · 账号支付安全提醒

收藏课程后,能更快找到我哦~

使用 Ctrl+D 可将课程添加到书签

邀请您关注公众号
关注后,及时获悉本课程动态

举报

0/150
提交
取消
全部 精华 我要发布

最赞回答 / 慕粉1474689578
$p='/<li>(.*?)<\/li>/';表达式少了个\

最新回答 / 慕码人5437250
.*具有贪婪的性质,首先匹配到不能匹配为止,根据后面的正则表达式,会进行回溯。.*?则相反,一个匹配以后,就往下进行,所以不会进行回溯,具有最小匹配的性质。

最赞回答 / 慕码人5437250
不是以>开头的任意字符。

最新回答 / awula
这里的“|”明显是打错了,应该是“/”的

最赞回答 / 蛋切刀
注册的时候,判断用户名、邮箱、手机号这些是否符合要求,这个是用php在判断,判断以后还要配合一些前端的页面返回用户体验才会比较好,如果你要在前端页面就有提示,就要用javascript

已采纳回答 / 慕莱坞0034921
懒惰模式是在匹配最近的一个标志,贪婪模式是匹配到最远的一个标志。看你的代码因为$st中<li></li>和<li></li>有一个换行符的,所以正则表达式结果一样的,如果转为一行就不一样了。

已采纳回答 / 慕无忌5167029
$matches[0]包含匹配完整模式的字符串的数组,$matches[1]是包含闭合标签内的字符串的数组。 

最赞回答 / 小橙子的小马甲
$subject = "abcaaaaaaaaaadef";$pattern = '/a.*?d/';preg_match($pattern, $subject, $matches);print_r($matches); //在这种情况下,.*会一直匹配,加了?后,变成非贪婪模式,?后跟的是d,所以会匹配至d结束//运行结果是
A...

已采纳回答 / 林北学网页
正则表达式匹配的一般结果会包括你所有匹配的内容,但是有些的匹配内容不是我们全部要的,例如我们要陪陪的文字源是“hello, my name is xxx”,我们想要提取名字"xxx",然后我们寻找名字的方法是"my name is "后面就是我想要的名字,所以正则表达式为'my name is (\w+)',得到的结果为数组Array([0]=>"my name is xxx" [1]=>"xxx"),但是我们真正有用的是"xxx",而完整模式,我觉得可以用于匹配的结果"xxx"错误了,我们用...

最新回答 / Lydiar3308665
最后ul写错了,应该是li,你这么写会匹配</ul>之前有<li>[a-z]+\s[0-9]+,所以匹配结果为空。

最新回答 / 慕粉4214887
$matches  是preg_match_all 最后得出的 是一个数组 第0个代表全部  第1个代表正则匹配的第一个<td>Eric</td> 里的  第二个 代表第二个 <td>25</td>
全部 我要发布
最热 最新
只看我的

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

账号登录 验证码登录

遇到问题
忘记密码

代码语言