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

zwi*_*ion 2 php regex preg-replace

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

<h1>tag1</h> 
       <p>Between h ad p we have \s and \n</p>
Run Code Online (Sandbox Code Playgroud)

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

<h1>tag1</h><p>Between h ad p we have \s and \n</p>
Run Code Online (Sandbox Code Playgroud)

我已经尝试过此正则表达式,但不是workig。

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

EOF;


$string =  trim(preg_replace('/(>\s+<)|(>\n+<)/', ' ', $str)); 
Run Code Online (Sandbox Code Playgroud)

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

nu1*_*73R 5

有两个问题

(preg_replace('/(>\s+<)|(>\n+<)/', ' ', $str)
Run Code Online (Sandbox Code Playgroud)
  • \s已经包含在内,\n因此无需提供其他更改。

  • (>\s+<)这里的正则表达式会同时消耗两个角度<>因此用空格替换会删除所有包含角度的内容

输出是

<h1>tag1</hp>Between h ad p we have \s and \n</p>
Run Code Online (Sandbox Code Playgroud)

那不是你想要的

如何改正

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

<h1>tag1</h><p>Between h ad p we have \s and \n</p>
Run Code Online (Sandbox Code Playgroud)

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

您也可以使用环视解决问题

正则表达式将是

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

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

说明

(?<=>)断言\s>

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

(?=<)断言\s之后是<

在这里环顾四周不会像以前的正则表达式那样消耗任何尖括号

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