【问题标题】:PHP - How to remove newline with '>' before line breakPHP - 如何在换行符之前使用“>”删除换行符
【发布时间】:2018-12-20 17:39:26
【问题描述】:

我有这样的输入文本

bla;bla<ul>
<li>line one</li>
<li>line one</li>
<ul>bla
line two
line tree

我只想用空格替换包含'>'的行; 行尾没有“>”的其他行将被忽略。

输出应该是:

bla;bla<ul><li>line one</li><li>line one</li><ul>bla
line two
line tree

替换该行的 PHP 代码应该是什么?

我试过了

$output = preg_replace( "/\r|\n/", "", $text );

但这不是一个好主意,因为该代码将应用于 $text 的所有行

非常感谢。

现在我可以解决这个问题了

$output = preg_replace("/(?<=>)\s+(?=)/", "", $text );

非常感谢

【问题讨论】:

  • 请编辑您的问题并添加您尝试过但不适合您的代码。
  • 你为什么要这样做?
  • 我编辑了一个 csv 文件,其中包含一些 html 元素并导致错误,所以我想删除 html 标记中 '>' 之后的所有换行符以将它们保持在单行中

标签: php regex preg-replace


【解决方案1】:

您可以使用&gt;(?:\n|\r\n) 正则表达式并将其替换为&gt;,这将匹配仅位于行尾的&gt;

$text = "bla;bla<ul>\n<li>line one</li>\n<li>line one</li>\n<ul>bla\nline two\nline tree";
$output = preg_replace( "/>(?:\n|\r\n)/", ">", $text );
echo $output;

这会像您期望的那样提供以下输出,

bla;bla<ul><li>line one</li><li>line one</li><ul>bla
line two
line tree

Live Demo

【讨论】:

  • 非常感谢,非常感谢,但它对我不起作用。
  • @Sun:它对您不起作用的一个原因可能是因为您的文件可能包含 Windows 换行符 \r\n。因此,覆盖 windows 换行符的更好的正则表达式应该是\n|\r\n。您的正则表达式 '(?)\s+(?=)' 可能适用于您的情况,但它也将匹配一个或多个以 &gt; 开头的空格,位于行中间而不是行尾,并将被剥离离开那个空白区域。许多语言和工具也不支持向后看,因此使用更安全的正则表达式是&gt;(?:\n|\r\n),并将其替换为&gt;。为语言不支持后视的人更新我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-09
  • 2017-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多