php中难以理解的逻辑preg_replace

时间:2018-01-17 10:39:16

标签: php regex preg-replace

我有字符串:

$pattern = '/\s*$/';
// \s* - any spaces
// $   - end of string

模式:

preg_replace($pattern, "\n5", $string);

为什么我打电话:

"1\n2\n3\n4\n5\n5"

输出是:

"1\n2\n3\n4\n5"

我的模式有什么问题以及如何更改它,结果将是:

{{1}}

1 个答案:

答案 0 :(得分:0)

$可以匹配即将发生的换行符以及字符串的结尾。

但是,在这种情况下,您的主要问题是\s*匹配或更多空格字符。

  • 例如\n\n␄匹配并首先由\s*$
  • 替换
  • 以及第一次替换后的5\n␄

    • \s*$被视为$

    • 文字的新结尾␄仍与$匹配。

    • 它不像$本身总是匹配两次,但\s*$的组合可以。

最简单的解决方法是不匹配零空格,但要使它只占用现有的空格:

/\s+$/

在您的情况下,这足够了,因为您只关心字符串的结尾并清除多余的换行符。