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

PHP正则表达式问题:为罗马数字开头的副标题添加h4标签失败求助

问题解决:给指定副标题添加h4标签

你的正则失效主要有两个核心问题:

  1. 错误使用了行首^和行尾$锚定符:原字符串里的副标题并非单独占据一行(比如前面跟着<p><br>),^会强制匹配行的起始位置,导致无法命中目标内容;
  2. 贪婪模式的.*可能会过度匹配,甚至把后面的文本也包含进来,破坏结构。

修改后的正则及代码如下:

$string = "<h1>Is Buying Property During a Recession a Smart Financial Move?</h1><p><br>I. Introduction<br><br> In this article, we will explore the benefits and risks of buying property during a recession, as well as provide tips and considerations for making an informed decision.<br><br>II. What is a Recession?<br><br>A recession is a period of ..";

// 修改后的正则:去掉行首尾锚定,用非贪婪匹配,同时确保匹配罗马数字开头到<br><br>的内容
$pattern = "/([IVXLCDM]+\.).*?<br><br>/"; 

$new_string = preg_replace($pattern, "<h4>$0</h4>", $string);

echo $new_string;

关键修改点说明:

  • 移除^和$:不再限制必须是行首行尾,只要字符串中出现符合规则的片段就会匹配;
  • 把.*改成.*?:启用非贪婪匹配,确保匹配到第一个<br><br>就停止,避免过度匹配后面的内容;
  • 保留[IVXLCDM]+:正确匹配罗马数字(I、V、X、L、C、D、M)组合。

如果需要更严谨(比如兼容罗马数字句点后带空格的情况),可以调整正则为:

$pattern = "/([IVXLCDM]+\.\s?).*?<br><br>/";

这里的\s?用来匹配罗马数字句点后可能存在的0个或1个空格。

内容的提问来源于stack exchange,提问作者Veeza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 10:34:59