正则表达式删除标签之间的换行符

时间:2013-05-27 00:32:57

标签: php regex line-breaks

我正在使用一种模式,当在标签之间进行选择时,该模式将始终将所有内容放在一行上。在这种情况下,我希望<ul>标记内的所有内容都位于一行上。我在整个stackoverflow中尝试了一些,但到目前为止还没有成功。

<ul>
<li>
<span><span><span>Manager</span></span></span>
</li>
<li>
<span><span><span>physical</span></span></span>
</li>
<li>
<span><span><span>transport
</span></span></span>
</li>
<li>
<span>
<span><span>    Australia</span></span></span>
</li>
</ul>

预期:

 <ul><li><span><span><span>Manager</span></span></span></li><li><span><span><span>physical</span></span></span></li><li><span><span><span>transport</span></span></span></li><li><span><span><span>    Australia</span></span></span></li></ul>

编辑:Remove line breaks from between html tags可能是我发现的最接近的正则表达式模式,它仍然不能满足我的需要。

2 个答案:

答案 0 :(得分:2)

也许这会有所帮助?它非常非常基本,可能容易出错。

$test = '<ul>
<li>
<span><span><span>Manager</span></span></span>
</li>
<li>
<span><span><span>physical</span></span></span>
</li>
<li>
<span><span><span>transport
</span></span></span>
</li>
<li>
<span>
<span><span>    Australia</span></span></span>
</li>
</ul>';

echo preg_replace('/\n?<(.*?)>\n/', '<$1>', str_replace("\r\n", "\n", $test));

编辑:我重新阅读了你的问题,觉得这不完全是你追求的。所以,我做到了:

function strip_tag_nl($tag, $subject) {
    $tag = preg_quote($tag);
    return preg_replace_callback('/(<' . $tag . '(.*?)>)\n?(.*?)(<\/' . $tag . '>)/s', function($matches) {
        $stripped = preg_replace(array('/\n?<(.*?)>\n/'), '<$1>', $matches[3]);
        return $matches[1] . $stripped . $matches[4];
    }, str_replace("\r\n", "\n", $subject));
}

echo strip_tag_nl('li', $test);

将您想要的标记传递给它,以便删除换行符。例如,strip_tag_nl('ul', $text)代表原始问题...如果你strip_tag_nl('li', $text),你会得到这个:

<ul>
<li><span><span><span>Manager</span></span></span></li>
<li><span><span><span>physical</span></span></span></li>
<li><span><span><span>transport</span></span></span></li>
<li><span><span><span>    Australia</span></span></span></li>
</ul>

答案 1 :(得分:0)

也许我错过了一些东西,但是你的示例除了从你的html中删除换行符以显示你提供的结果外,没有显示任何其他内容。在这种情况下,一个简单的str_replace(PHP_EOL, '', $string)可以工作,你不需要任何正则表达式。

我认为这个问题需要澄清除了换行符之外你想要删除的内容。