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。
我已经通过以下服务测试了代码和正则表达式,都告诉我它应该可以工作:
Functions online (no direct link)
$count
是 0,所以很明显它不匹配,但是上面的来源应该足以证明它应该匹配。
编辑: 该代码也不适用于非常非常小的字符串(由两个匹配项组成)。
看来问题是我的测试服务器是 运行 Windows 并且我习惯于 Linux 上的正则表达式。 Windows 通过 \r\n
而不是仅 \n
匹配换行符,因此我将所有 \n
更改为 \r?\n
以实现可移植性,这解决了它。
编辑: 我现在按照 @je-suis-charlie 的建议使用 \R。
我会在两天后接受这个答案。
我有以下代码
$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。
我已经通过以下服务测试了代码和正则表达式,都告诉我它应该可以工作:
Functions online (no direct link)
$count
是 0,所以很明显它不匹配,但是上面的来源应该足以证明它应该匹配。
编辑: 该代码也不适用于非常非常小的字符串(由两个匹配项组成)。
看来问题是我的测试服务器是 运行 Windows 并且我习惯于 Linux 上的正则表达式。 Windows 通过 \r\n
而不是仅 \n
匹配换行符,因此我将所有 \n
更改为 \r?\n
以实现可移植性,这解决了它。
编辑: 我现在按照 @je-suis-charlie 的建议使用 \R。
我会在两天后接受这个答案。