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 编辑: 解决方法
你需要一个四重反斜杠:在单引号内,双反斜杠已经是一个转义的单反斜杠. [尝试打印$regex变量]
所以: $regex = '/^(?:[w]:)(?:\[^:*?"<>|rn]+)+\[^\:*?"<>|rn]+.(?:php)/mi'; 或者使用这里更可读的nowdoc语法: $regex = <<<'REGEX' /^(?:[w]:)(?:[^:*?"<>|rn]+)+[^:*?"<>|rn]+.(?:php)/mi REGEX; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |