preg_replace 在本地机器上不起作用,在其他任何地方都可以

preg_replace doesn't work on local machine, works everywhere else

我有以下代码

$cities = preg_replace(
    '/^\d*\n(.*)\n([^\d].*|)/m',
    '\item \textbf{} -- ',
    $_POST['cities']
);

$_POST['cities'] has this value.

$cities 与我本地计算机上的 $_POST['cities'] 相同,并且没有完成任何替换。

我 运行 PHP 5.5.9 通过 Xampp。

我已经通过以下服务测试了代码和正则表达式,都告诉我它应该可以工作:

PHP Live Regex

Regex101

Functions online (no direct link)

$count 是 0,所以很明显它不匹配,但是上面的来源应该足以证明它应该匹配。

编辑: 该代码也不适用于非常非常小的字符串(由两个匹配项组成)。

看来问题是我的测试服务器是 运行 Windows 并且我习惯于 Linux 上的正则表达式。 Windows 通过 \r\n 而不是仅 \n 匹配换行符,因此我将所有 \n 更改为 \r?\n 以实现可移植性,这解决了它。

编辑: 我现在按照 @je-suis-charlie 的建议使用 \R。

我会在两天后接受这个答案。