用于删除&lt;中的起始和结束空格的正则表达式&GT;和<!----> PHP

时间:2014-12-01 11:57:33

标签: php regex

我有一个字符串,其数据如下:

<div style="float: right;"><span class='abcd'>      test data here     </sapn></div>

我希望输出为:

<div style="float: right;"><span class='abcd'>test data here</sapn></div>

到目前为止,我所尝试的就像在regex php中一样,

preg_replace('/\s+/', '', $data);
preg_replace('/[\n\r]+/', '', $data);

但它没有给我预期的结果

5 个答案:

答案 0 :(得分:0)

试试这个

$data = preg_replace('/\s{2,}/', '', $data);

答案 1 :(得分:0)

(<([^ ]+)[^<>]+>)\s*([^<]+?)\s*(<\/\2>)

试试这个。$1$3$4。见。演示。

http://regex101.com/r/vF0kU2/5

答案 2 :(得分:0)

你做得对。但preg_replace 不会修改参数。而是返回修改后的字符串

所以你可以写点像

$data = preg_replace('/\s+/', ' ', $data);

$data作为

<div style="float: right;"><span class='abcd'>test data here</sapn></div>

注意

您必须使用空格' '替换以保留单个空格

答案 3 :(得分:0)

您可以尝试下面的内容。

preg_replace('~(?<=<)[^<>]*(?=>)(*SKIP)(*F)|(?:(?<=>)\h+|\h+(?=<))~', '', $data);

DEMO

\h+匹配一个或多个水平空格。

答案 4 :(得分:0)

使用DOMDocument:

$html = '<div style="float: right;"><span class="abcd">      test data here     </span></div>';

$dom = new DOMDocument();
$dom->loadHTML($html, LIBXML_HTML_NODEFDTD|LIBXML_HTML_NOIMPLIED);

$xpath = new DOMXPath($dom);

$textNodeList = $xpath->query('//text()');

foreach ($textNodeList as $textNode) {
    $textNode->nodeValue = trim($textNode->nodeValue);
}

$html = $dom->saveHTML();