带有多行修饰符的正则表达式在服务器上工作但在 xampp localhost 上不起作用

regex with multiline modifier work on server but not work on xampp localhost

我有一个在互联网上运行良好的正则表达式 Regex101

我使用下面的 PHP 代码在本地主机中测试它

<?php
$regex = "/(?:دفتر)(?:.*?)\:(?:.*?|\n)(^(?!.*\@).+)/mu";
preg_match_all($regex,$str, $arr);
print_r($arr);
?>

但是当 运行 它在 XAMPP 本地主机上时它 return 的空数组,这段代码有什么问题,我该如何修复它

您需要考虑换行符序列的不同变体。在Windows中为CR+LF,在Linux中为LF,在MacOS中为CR。

在 PCRE 中,您有一个非常方便的 shorthand class \R 可以匹配 任何换行序列 .

所以,使用

'/(?:دفتر)(?:[^:\n]*):.*\R((?!.*@).+)/mu'

并且不要忘记 /u 修饰符,它会强制正则表达式引擎将模式和输入字符串都视为 UTF8 字符串。

请注意 /U 修饰符与 /u 不同。 /U 只交换贪婪。

/%(.*?)%/U = /%(.*)%/
/%(.*?)%/ = /%(.*)%/U