php - 如何删除 <ul> 元素内标记对之间的所有空格

标签 php regex html-parsing html-lists whitespace

我目前有以下内容:

<section>
<hgroup>
<h1 style="text-align: center;">Koptitel 1</h1>
<h2 style="text-align: center;">Subtitel</h2>
</hgroup>
<ul class="sample1">
    <li class="sample2">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum placerat, urna eget ultricies egestas, lectus mi tincidunt nulla, ut molestie odio lectus ut arcu.</li>
    <li class="sample2">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum placerat, urna eget ultricies egestas, lectus mi tincidunt nulla, ut molestie odio lectus ut arcu."</li>
</ul>
</section>

沙箱网址:http://regex101.com/r/zQ0lN5

我有以下 PHP 代码:

$new_content = preg_replace('/(?<=<ul class="sample1">|<\/li>)\s*?(?=<\/ul>|<li.*?>)/is', '', $content);

这有效,ul 和 li 之间以及 li 项之间的空格被删除,因此预期的输出是。

<section>
<hgroup>
<h1 style="text-align: center;">Koptitel 1</h1>
<h2 style="text-align: center;">Subtitel</h2>
</hgroup>
<!-- SEE BELOW NO WHITE SPACES -->
<ul class="sample1"><li class="sample2">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum placerat, urna eget ultricies egestas, lectus mi tincidunt nulla, ut molestie odio lectus ut arcu.</li><li class="sample2">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum placerat, urna eget ultricies egestas, lectus mi tincidunt nulla, ut molestie odio lectus ut arcu."</li></ul>
</section>

我更喜欢做以下事情:

//Ignore what's between < and > : <ul.*?>
$new_content = preg_replace('/(?<=<ul.*?>|<\/li>)\s*?(?=<\/ul>|<li.*?>)/is', '', $content);

因此,编码员甚至可以在 ul 标记中添加样式或其他内容,并且代码仍然不会中断。然而,lookbehind 必须是零宽度,因此不允许使用量词。那么我该如何解决这个问题呢?

最佳答案

也许这可以解决问题?您不需要回顾。

echo preg_replace("/[\s\n]*?(\<(\/ul>|li[\s>]))/i", "$1", $your_document);

哪里$your_document是您要处理的 HTML 代码。

所以,如果这是您的 HTML:

<section>
<hgroup>
<h1 style="text-align: center;">Koptitel 1</h1>
<h2 style="text-align: center;">Subtitel</h2>
</hgroup>
<ul class="sample1">
    <li class="sample2">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum placerat, urna eget ultricies egestas, lectus mi tincidunt nulla, ut molestie odio lectus ut arcu.</li>
    <li class="sample2">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum placerat, urna eget ultricies egestas, lectus mi tincidunt nulla, ut molestie odio lectus ut arcu.</li>
</ul>
</section>

输出如下:

<section>
<hgroup>
<h1 style="text-align: center;">Koptitel 1</h1>
<h2 style="text-align: center;">Subtitel</h2>
</hgroup>
<ul class="sample1"><li class="sample2">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum placerat, urna eget ultricies egestas, lectus mi tincidunt nulla, ut molestie odio lectus ut arcu.</li><li class="sample2">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum placerat, urna eget ultricies egestas, lectus mi tincidunt nulla, ut molestie odio lectus ut arcu.</li></ul>
</section>

这会删除 \n 之间的所有空格和换行符 ( <ul> and <li> ) ,</li> and <li>之间,以及 </li> and </ul> 之间标签制作完整<ul>元素写在一行中, > 之间没有空格和<里面。此正则表达式不区分大小写,因此它还会查找 <LI>以及 <li> .

关于php - 如何删除 <ul> 元素内标记对之间的所有空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23343824/

相关文章:

Python 正则表达式与其他正则表达式工具所匹配的不匹配

python - Beautiful Soup 不会抓取所有可见的网站数据(Python 3)

php - PHP错误: Undefined offset error within foreach loop

php - ng-init 中的单引号/双引号

Java正则表达式 - 查找没有元音的字符串

javascript - JS 将正则表达式拆分为两个不同的字符

php - Laravel 5.2 查询在本地主机上正常工作,而不是在远程服务器上

php - 不能再在 Magento 1.4.2.0 中添加注册字段

python - 在 HTML BeautifulSoup 中按文本查找和替换

php - 如何在 PHP 中使用黑名单去除 HTML 标签?