You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则表达式跨行匹配问题求助:起始与结束标签分属不同行

解决跨多行正则匹配HTML标签的问题

首先,你的正则表达式在标签跨多行时失效,主要原因是默认情况下正则的.元字符不会匹配换行符,而且如果不使用非贪婪匹配,很容易出现过度匹配的问题。针对你的需求,我们可以这样调整正则:

修正后的正则代码

preg_match_all('/<p class="psku">(.*?)<\/span><\/p>/s', $string, $info);

关键调整点:

  • /s 修饰符:这个修饰符会让.匹配包括换行符在内的所有字符,完美解决起始和结束标签在不同行的问题。
  • .*? 非贪婪匹配:使用*?代替*,确保正则只会匹配到最近的</span></p>结束标签,而不是从第一个起始标签一直匹配到最后一个结束标签,避免过度抓取内容。

额外提醒:用正则解析HTML的局限性

虽然正则可以解决简单的HTML匹配需求,但HTML的结构往往是嵌套、不规则的(比如属性顺序变化、额外空格、自闭合标签等),正则很容易出现匹配错误。更可靠的方式是用PHP的DOM扩展来解析:

比如,如果你的目标是提取<p class="psku">内的内容(假设实际内容里包含<span>),可以这样写:

$dom = new DOMDocument();
// 忽略HTML解析警告(针对不规范的HTML)
libxml_use_internal_errors(true);
$dom->loadHTML($string);
libxml_clear_errors();

$xpath = new DOMXPath($dom);
// 匹配所有class为psku的p标签,然后提取内部文本
$pskuElements = $xpath->query('//p[@class="psku"]');
$info = [];
foreach ($pskuElements as $elem) {
    $info[] = trim($elem->textContent);
}

这种方法能更好地处理复杂的HTML结构,不会因为换行、空格或者标签嵌套而出错。

内容的提问来源于stack exchange,提问作者Temporary-Failure

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:26:17