2024 年 PHP 大会日本站

PCRE 函数

目录

添加注释

用户贡献的注释 3 个注释

steve at stevedix dot de
20 年前
需要注意的是,正则表达式实际上是一种声明式编程语言,就像 Prolog 一样:你的正则表达式是一组规则,正则表达式解释器会尝试将其与字符串匹配。在此匹配过程中,解释器会做出某些假设,并继续假设直到匹配失败,这会导致回溯。除非明确指示不要,否则正则表达式会假设“贪婪匹配”,这可能会导致大量回溯。一个一般的经验法则是,回溯越多,匹配过程就越慢。

因此,如果您试图优化程序以使其快速运行(并且您不能不用正则表达式),那么优化正则表达式以使其快速匹配至关重要。

我建议使用“The Regex Coach”之类的工具来调试正则表达式字符串。

http://weitz.de/files/regex-coach.exe(Windows 安装程序) http://weitz.de/files/regex-coach.tgz(Linux tar 存档)
theking2 at king dot ma
1 年前
编写正则表达式可能很繁琐且容易出错。在 https://regex101.com/ 上测试你的正则表达式,以确保你没有遗漏任何内容。它甚至可以对示例字符串进行颜色编码。
stronk7 at moodle dot org
17 年前
关于 5.2.x 和 pcre.backtrack_limit 的一个评论

请注意,此设置在之前的 PHP 版本中不存在,并且在这些版本下的行为(或限制)实际上更高,因此所有这些 PCRE 函数都能够“捕获”更长的字符串。

随着此设置的出现,默认为 100000(小于 100K),你将无法使用例如“非贪婪”修饰符来匹配/捕获超过该大小的字符串。

因此,在很多情况下,你需要提高这个(在我看来非常小)的限制。

最糟糕的是,PHP 根本不会匹配/捕获超过 pcre.backtrack_limit 的字符串,并且对此完全保持沉默(我认为如果引发一些 NOTICE/WARNING 可能会有很大帮助)。

根据我在论坛、错误报告等中阅读的内容,很多人都在遭受这种变化带来的困扰。

希望这个注释有帮助,再见 :-)
To Top