多次匹配正则表达式模式

Posted

技术标签:

【中文标题】多次匹配正则表达式模式【英文标题】:Match regex pattern multiple times 【发布时间】:2020-10-10 23:47:59 【问题描述】:

我正在尝试编写一个匹配给定模式的正则表达式 2 到无限次。实际上,我只是想将多个换行符合并为一个,如果有的话。

示例输入:

<br><br>
<br>
ABC
<br>
<br>

预期输出:

<br>
ABC
<br>

如果在上述输出上运行正则表达式,那么我希望看到完全相同的输出。

&lt;br&gt; 标签之间可以有任意数量的空格。

我尝试过的:

$html = preg_replace('/(?:<br>\s?)2,/s', null, $html);

【问题讨论】:

如果您不必费心处理 Windows 创建的文件(使用行终止符 \r\n),请考虑将匹配的 /\n2,/ 替换为 \n/\n(?=\n)/ 用空字符串 (都设置了多行标志)。 【参考方案1】:

只需查找 &lt;br&gt; 后跟可选空格字符 2 次或更多次,然后替换为 &lt;br&gt;

$html = preg_replace('/(<br>\s*)2,/', '<br>', $html);

如果需要,您可以替换为 "&lt;br&gt;\n"

【讨论】:

以上是关于多次匹配正则表达式模式的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式的全局匹配模式

5.2.1 正则表达式语法与子模式扩展语法

正则表达式匹配

Python re正则表达式速查

对着爬虫网页HTML学习Python正则表达式re

书籍正则