PHP 7子版本 – REGEX行为的差异?

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了PHP 7子版本 – REGEX行为的差异?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
鉴于代码

$my_str = '
Rollo is*
My dog*
And he\'s very*
Lovely*
';

preg_match_all('/\S+(?=\*$)/m',$my_str,$end_words);
PRint_r($end_words);

PHP 7.3.2(XamPP)中,我得到了意外的输出

Array ( [0] => Array ( ) )

而在PHPFiddle,在PHP 7.0.33上,我得到了我的预期:

Array ( [0] => Array ( [0] => is [1] => dog [2] => very [3] => Lovely ) )

任何人都可以告诉我为什么我得到这个差异,是否在7.0.33之后的REGEX行为发生了变化?

解决方法

看起来在你所拥有的环境中,PCRE库是在没有PCRE_NEWLINE_ANY选项的情况下编译的,并且多线模式中的$仅匹配LF符号之前和.匹配任何符号,但LF.

您可以使用PCRE(* ANYCRLF)动词修复它:

'~(*ANYCRLF)\S+(?=\*$)~m'

(* ANYCRLF)指定换行约定:(* CR),(* LF)或(* CRLF),等同于PCRE_NEWLINE_ANY选项.见PCRE documentation

最后,这个PCRE动词启用.匹配任何字符但是CR和LF符号和$将在这两个字符之前匹配.

rexegg.com查看有关此动词和其他动词的更多信息:

@H_502_91@

脚本宝典总结

以上是脚本宝典为你收集整理的PHP 7子版本 – REGEX行为的差异?全部内容,希望文章能够帮你解决PHP 7子版本 – REGEX行为的差异?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。