加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 16:59:27 所属栏目:PHP教程 来源:网络整理
导读:我正在创建一个与 Windows的文件系统文件路径匹配的正则表达式: c:WINDOWSSYSTEM32cmda.php //valid matchc:WINDOWSSYSTEM32cmda //invalid match 使用此模式和代码: function validate_filepath(){ $view_path = 'c:WINDOWSSYSTEM32cmda.php'
我正在创建一个与 Windows的文件系统文件路径匹配的正则表达式:

c:WINDOWSSYSTEM32cmda.php //valid match
c:WINDOWSSYSTEM32cmda     //invalid match

使用此模式和代码:

function validate_filepath()
{
    $view_path = 'c:WINDOWSSYSTEM32cmda.php';

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

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

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

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

编辑:
我正在使用php-5.6.17

解决方法

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

所以:

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

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

$regex = <<<'REGEX'
/^(?:[w]:)(?:[^:*?"<>|rn]+)+[^:*?"<>|rn]+.(?:php)/mi
REGEX;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读