正则表达式PHP用于查找和替换空格和HTML标记之间的新行

时间:2014-11-01 06:06:42

标签: php regex preg-replace

我将有一个由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

3 个答案:

答案 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后跟<

这里的外观不会使用任何尖括号,如前面的正则表达式

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

答案 1 :(得分:0)

你可以试试这个:

echo preg_replace("/(?=\>\s+\n|\n)+(\s+)/", "", $str);

答案 2 :(得分:0)

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

试试这个。参见demo。替换empty string

http://regex101.com/r/jI8lV7/1