【问题标题】:Remove newlines and spaces删除换行符和空格
【发布时间】:2012-11-18 16:44:59
【问题描述】:

如何删除 <table> .... </table> 之间的换行符并在每个之后添加 \n

例如:

<table border="0" cellspacing="0" cellpadding="0" width="450" class="descriptiontable"><tr>
<td width="50%" valign="top">
<span class="displayb">Model Procesor:</span> Intel Celeron<br><span class="displayb">Frecventa procesor (MHz):</span> 2660<br><span class="displayb">Placa Video:</span> Intel Extreme Graphics 2<br><span class="displayb">Retea integrata:</span> 10/100Mbps, RJ-45<br><span class="displayb">Chipset:</span> Intel 845G<br>
</td>
<td width="50%" valign="top">
<span class="displayb">Capacitate RAM (MB):</span> 512<br><span class="displayb">Tip RAM:</span> DDR<br>
</td>
</tr></table>

变成:

<table border="0" cellspacing="0" cellpadding="0" width="450" class="descriptiontable"><tr><td width="50%" valign="top"><span class="displayb">Model Procesor:</span> Intel Celeron<br><span class="displayb">Frecventa procesor (MHz):</span> 2660<br><span class="displayb">Placa Video:</span> Intel Extreme Graphics 2<br><span class="displayb">Retea integrata:</span> 10/100Mbps, RJ-45<br><span class="displayb">Chipset:</span> Intel 845G<br></td><td width="50%" valign="top"><span class="displayb">Capacitate RAM (MB):</span> 512<br><span class="displayb">Tip RAM:</span> DDR<br></td></tr></table>\n

s.

【问题讨论】:

  • 你为什么要删除那个空格?您认为这是某种性能改进吗?我建议它不会有任何明显的影响。如果您想加快速度,请先衡量您的时间在哪里。

标签: php regex preg-replace preg-match


【解决方案1】:

我认为您的意思是您有一个完整的 HTML 文件/字符串,并且只想删除表格内的换行符。

您可能应该使用 DOM 解析器来查找 HTML 的相应部分,但是这个临时的正则表达式解决方案可能对您很有效:

$str = preg_replace('~[\r\n]+(?=(?:(?!<table).)*</table>)~is', '', $str);
$str = preg_replace('~</table>~i', "$0\n", $str);

如果您只想在 \n 不存在的情况下添加它,您可以将其作为第二个替换:

$str = preg_replace('~</table>(?!\n)~i', "$0\n", $str);

这匹配(独立于系统)所有换行符,如果它们后跟&lt;/table&gt; 而没有&lt;table 介于两者之间。当然,这会导致嵌套表和类似事物出现问题。这就是为什么你应该使用 DOM 解析器。

【讨论】:

  • 感谢您提供正则表达式和提示。我知道我需要做什么。
【解决方案2】:
$string = preg_replace('/\s\s+/', '', $string);

这会删除多个空格和换行符。

最后,您只需在结果中添加“\n”即可:

$string = preg_replace('/\s\s+/', '', $string) . "\n";

应该这样做。

【讨论】:

  • 但这不是那些标签之间的HTML
    并添加一个 \n @
    的末尾
  • 这段代码不是只适用于 Windows 风格的换行符,换行符有两个字符吗?
  • 好吧,我假设您的表格标记位于服务器端的 $string 中。
  • 我在虚拟主机上有 linux。我在 ex 中有更多这样的行,我想为每一行做 1 来制作一个 csv。
  • 他想替换表格之间的换行符而不是所有内容
【解决方案3】:

找到方法了,忘记发了

$content = str_replace('</table',"</table>\n",str_replace("\n","",$str));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    相关资源
    最近更新 更多