夜光序言:
不管生活如何变故,道路如何曲折,你千万别掉队,因为希望和梦想就在前面。不管生活如何变故,道路如何曲折,你千万别掉队,因为希望和梦想就在前面。
正文:
查找所有匹配结果
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标签中的数据。
/**
* Created by PhpStorm.
* User: 夜光
* Date: 2019/7/15
* Time: 19:55
*/
<?php
$str = "<ul>
<li>item 1</li>
<li>item 2</li>
</ul>";
//在这里补充代码,实现正则匹配所有li中的数据
$p = "/<li>(.*)<\/li>/i";
$p = "/<li>(.*)<\/li>/i";//解释下这个正则://后面的i表示不区分大小写,<li>(.*?)<\/li>表示li标签内的匹配的()内的值有多少,括号内的.表示所有单字符,*表示数量为0个或者多个。也就是li标签内有字符就显示出来
preg_match_all($p,$str,$matches);
print_r($matches[1]);
// $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);
// // echo $matches[1];
?>