PHP正则表达式问题:为罗马数字开头的副标题添加h4标签失败求助
问题解决:给指定副标题添加h4标签
你的正则失效主要有两个核心问题:
- 错误使用了行首
^和行尾$锚定符:原字符串里的副标题并非单独占据一行(比如前面跟着<p><br>),^会强制匹配行的起始位置,导致无法命中目标内容; - 贪婪模式的
.*可能会过度匹配,甚至把后面的文本也包含进来,破坏结构。
修改后的正则及代码如下:
$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
相关产品推荐
相关产品推荐

