PHP中如何使用正则表达式抓取a标签的内容
如下图所示,我爱自学小编通过正则表达式获取了下方所示的源码。那么如何获取a标签中“内容1”和“内容2”的值呢!
<ul>
<li><a href=”http://xxxxx/2022-11-18/207122075.html” target=”_blank”>内容1</a></li>
<li><a href=”http://xxxxx/2022-11-18/207122076.html” target=”_blank”>内容2</a></li>
</ul>
解决方法一,通过正则表达式的子模式功能
这里需要了解正则匹配的子模式功能:正则表达式中,可以使用“(”和“)”将模式中的子字符串括起来,以形成一个子模式。将子模式视为一个整体时,那么它就相当于一个单个字符。比如:正则表达式 /<b>(.*)</b>/,可以匹配内容:<b>内容1</b>,其中内容1就是表达式中(.*)对应的内容。(.*)匹配的内容就是这个正则表达式的子组。
$subject = ‘<a href=”http://xxxxx/2022-11-18/207122076.html” target=”_blank”>内容2</a>’;
$pattern = ‘/<a[^>]*>(.*)<\/a>/i’; // 这是匹配的正则表达式,“(”和“)”匹配的内容,是子组匹配模式
preg_match_all($pattern, $subject, $matches); // 开始匹配,该函数会把匹配结果放入 $matches数组中,$matches[0]保存完整模式的所有匹配, $matches[1] 保存第一个子组的所有匹配,以此类推。
print_r($matches[1]);
实现方法二:如果不理解正则的子模式,可以使用正则匹配后截取字符的方式
$subject = ‘<a href=”http://xxxxx/2022-11-18/207122076.html” target=”_blank”>内容2</a>’;
$pattern = ‘/>.*</i’; // 这是匹配的正则表达式获取包含“>链接内容<”的内容
preg_match_all($pattern, $subject, $matches); //
print_r(substr($matches[0][0],1,7));
推荐使用方法一