gpt4 book ai didi

php - PHP 正则表达式查找并替换 HTML 标签之间的空格和/或换行符

转载 作者:行者123 更新时间:2023-12-01 21:26:16 29 4
gpt4 key购买 nike

我将有一个由 HTML 代码组成的字符串(一行),该字符串将存储在 PHP 变量中。该字符串来自 HTML 页面,该页面通常在标签之间有换行符和空格。我们可以有新行(一个或多个)和/或空格,如下例所示:

<h1>tag1</h> 
<p>Between h ad p we have \s and \n</p>

执行正则表达式和 preg_replace 后,我想要这样:

<h1>tag1</h><p>Between h ad p we have \s and \n</p>

我已经尝试过这个正则表达式,但它不起作用。

$str=<<<EOF
<h1>tag1</h>
<p>Between h ad p we have \s and \n</p>

EOF;


$string = trim(preg_replace('/(>\s+<)|(>\n+<)/', ' ', $str));

在这里你可以找到完整的代码http://www.phpliveregex.com/p/7Pn

最佳答案

有两个问题

(preg_replace('/(>\s+<)|(>\n+<)/', ' ', $str)
  • \s已包括\n因此无需提供另一种选择。

  • (>\s+<)这里正则表达式消耗两个角度 <>因此替换为空格将删除包括角度在内的所有内容

输出为

<h1>tag1</hp>Between h ad p we have \s and \n</p>

这不是你想要的

如何纠正

使用正则表达式(>\s+<)和替换字符串为 ><输出为

<h1>tag1</h><p>Between h ad p we have \s and \n</p>

例如http://regex101.com/r/dI1cP2/2

您还可以使用lookaround来解决问题

正则表达式是

(?<=>)\s+(?=<)

并且替换字符串将为空字符串

说明

(?<=>)断言\s前面是 >

\s+匹配一个或多个空格

(?=<)断言\s接下来是 <

这里的环顾不会像之前的正则表达式一样消耗任何尖括号

参见http://regex101.com/r/dI1cP2/3例如

关于php - PHP 正则表达式查找并替换 HTML 标签之间的空格和/或换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26686661/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com