php – preg_match在验证Windows文件系统路径时不会按预期运行

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – preg_match在验证Windows文件系统路径时不会按预期运行脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在创建一个Windows文件系统文件路径匹配的正则表达式:

c:\WINDOWS\SYstem32\cmd\a.PHP //valid match
c:\WINDOWS\SYstem32\cmd\a     //invalid match

使用此模式和代码

function validate_filepath()
{
    $view_path = 'c:\WINDOWS\SYstem32\cmd\a.PHP';

    // ^(?:[\w]\:)                  # matching drive
    //(?:\\[^\\:*?"<>|\r\n]+)+\\    # matching folder
    // [^\\:*?"<>|\r\n]+\.(?:PHP)   # matching file and PHP extension
    $regex = '/^(?:[\w]\:)(?:\\[^\\:*?"<>|\r\n]+)+\\[^\\:*?"<>|\r\n]+\.(?:PHP)/mi';

    PReg_match($regex,$view_path,$matches);
    return($matches[0]);
}

我已经尝试使用https://regex101.com模式并且它与路径匹配,但是在使用PHP的preg_match时却没有.我在哪里弄错了?

我还没有真正看过PHP如何处理字符串,但我在regexonline中测试了使用双反斜杠和正确的模式,但是PHP仍然返回null $matches

编辑:@H_403_24@我正在使用PHP-5.6.17

解决方法

你需要一个四重反斜杠:在单引号内,双反斜杠已经是一个转义的单反斜杠. [尝试打印$regex变量]

所以:

$regex = '/^(?:[\w]\\:)(?:\\\\[^\\:*?"<>|\r\n]+)+\\\\[^\\\\:*?"<>|\r\n]+\\.(?:PHP)/mi';

或者使用这里更可读的Nowdoc语法:

$regex = <<<'REGEX'
/^(?:[\w]\:)(?:\\[^\\:*?"<>|\r\n]+)+\\[^\\:*?"<>|\r\n]+\.(?:PHP)/mi
REGEX;

脚本宝典总结

以上是脚本宝典为你收集整理的php – preg_match在验证Windows文件系统路径时不会按预期运行全部内容,希望文章能够帮你解决php – preg_match在验证Windows文件系统路径时不会按预期运行所遇到的问题。

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

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