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
有两个问题
(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