PHP正则无法匹配h2闭合标签与p开启标签之间换行的问题求助
你当前的正则无法匹配换行的原因有两点:
- 正则中的
.元字符默认不匹配换行符,你添加的m(多行修饰符)仅修改^和$锚点的匹配逻辑,让它们可以匹配每一行的首尾,不会改变.的匹配规则。 - 你写的
(.*)属于贪婪匹配,如果后续存在多个<p class="cn">标签,会匹配到最后一个符合条件的标签,匹配范围会超出预期。
解决方法
添加s(单行修饰符,也叫点号通配修饰符)即可让.匹配换行符,同时把.*改为非贪婪匹配.*?缩小匹配范围:
// 匹配验证写法 preg_match('/<\/h2>(.*?)<p class="cn">/s', $input_line, $output_array);
如果你要直接替换p标签的class类名,直接用preg_replace更高效,示例(将cn替换为自定义类名new-class):
$newClass = 'new-class'; $result = preg_replace('/(<\/h2>.*?<p class=")cn(")/s', '$1'.$newClass.'$2', $input_line);
内容的提问来源于stack exchange,提问作者phpnerd
相关产品推荐
相关产品推荐

