正则匹配指定div标签总是失败,问了ai才找到问题所在

PHP   2024-06-05 10:07   182   0  

要匹配的字符串

$str = '<div class="tpa_div">&nbsp;
<p><em><strong>【编者按】</strong>医生,是链接一线临床需求和新技术转化应用的枢纽。中国医生有着非常优良的传统,大医精诚的内涵也在时间浪潮中历久弥新。他们不应是困在论文、晋升等事务中的模糊面孔,而是修医术致精微、修医德怀仁心的时代英雄,也是医疗这一囊括了科学、社会学和经济学等复杂体系的中枢环节,更是围绕提升医疗质量和普惠性目标所构建的创新链条上的核心主体。经济观察报作为中国健康事业的观察者、记录者和推动者,将持续为读者呈现致力于医疗创新的大医生和他们的故事。</em></p>
<p><em>这是本专栏的第十九篇,主角是上海瑞金医院功能神经外科中心主任医师、博导孙伯民。</em></p>
</div>
<p>经历2022年的业绩回撤后,2023年,证券行业的营业收入出现小幅回升,各家券商的业绩表现分化明显,可谓&ldquo;有人欢喜有人愁&rdquo;。</p>';


实现代码

<?php

$text = '<div class="tpa_div">&nbsp;<p><em><strong>【编者按】</strong>医生,是链接一和他们的故事。</em></p></div><p>经历2022年的业绩回撤后,2023年,证券行业的营业收入出现小幅回</p>';

// 定义正则表达式
$pattern = '/<div class="tpa_div">.*?<\/div>/';

// 使用preg_match()函数查找匹配项
if (preg_match($pattern, $text, $matches)) {
    // $matches[0]将包含完整的匹配结果
    echo "找到的匹配内容:\n" . $matches[0];
} else {
    echo "未找到匹配内容。";
}

?>


然而匹配失败问了ai 才找到问题关键:s修饰符

如果您的代码在尝试匹配时没有成功,可能是因为PHP的正则表达式默认不处理多行字符串中的换行符。在HTML中,标签经常跨多行,因此需要调整正则表达式以使其能匹配换行符。

要在PHP的正则表达式中匹配包括换行符在内的任何字符,您可以使用s修饰符(PCRE_DOTALL模式),该模式使得.特殊字符匹配所有字符,包括换行符。

下面是修改后的代码示例:

<?php

$text = '<div class="tpa_div">&nbsp;<p><em><strong>【编者按】</strong>医生,是链接一和他们的故事。</em></p></div><p>经历2022年的业绩回撤后,2023年,证券行业的营业收入出现小幅回</p>';

// 添加's'修饰符来使`.`匹配包括换行符在内的所有字符
$pattern = '/<div class="tpa_div">.*?<\/div>/s';

if (preg_match($pattern, $text, $matches)) {
    echo "找到的匹配内容:\n" . $matches[0];
} else {
    echo "未找到匹配内容。";
}

?>



博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。
闲言碎语
你所有的忧伤,都来自于你的余额。
赞赏支持

如果觉得博客文章对您有帮助,异或土豪有钱任性,可以通过以下扫码向我捐助。也可以动动手指,帮我分享和传播。您的肯定,是我不懈努力的动力!感谢各位亲~