我将有一个由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
答案 0 :(得分:4)
有两个问题
(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
您还可以使用环视来解决问题
正则表达式将是
(?<=>)\s+(?=<)
并且替换字符串将为空字符串
<强>解释强>
(?<=>)
断言\s
由>
提出
\s+
匹配一个或多个空格
(?=<)
断言\s
后跟<
这里的外观不会使用任何尖括号,如前面的正则表达式
答案 1 :(得分:0)
你可以试试这个:
echo preg_replace("/(?=\>\s+\n|\n)+(\s+)/", "", $str);
答案 2 :(得分:0)