【发布时间】:2023-03-10 15:49:01
【问题描述】:
我的正则表达式在执行foo/bar 和one with spaces/two with spaces/three with spaces/four with spaces 等操作时有效,但在PHP 中使用urlencode 时会指向404 页面。
以下测试表明编码字符串在 URL 中不起作用: http://regex101.com/r/jP0gW1
有人有什么想法吗?使用“+”字符时也会中断。
【问题讨论】:
我的正则表达式在执行foo/bar 和one with spaces/two with spaces/three with spaces/four with spaces 等操作时有效,但在PHP 中使用urlencode 时会指向404 页面。
以下测试表明编码字符串在 URL 中不起作用: http://regex101.com/r/jP0gW1
有人有什么想法吗?使用“+”字符时也会中断。
【问题讨论】:
那是因为你没有在你的正则表达式中处理%。 \w 只匹配字母数字字符。
在您的正则表达式中添加 % 使其工作:
^([\w\ ]+)(?:/([\w\ ]+))?(?:/([\w\% ]+))?(?:/([\w\ ]+))?(?:/([\w\ ]+))?(?:/([\w\ ]+))?/?$
如果您愿意,可以简化您的正则表达式:
/^([\w\s%]+\/).*$/
【讨论】:
/^([\w\s%]+\/).*$/,因为他需要将令牌捕获到各个组中以在他的替换网址中重复使用。