首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式匹配不带文件扩展名的url

问正则表达式匹配不带文件扩展名的url
EN

Stack Overflow用户
提问于 2011-06-01 04:36:24
回答 2查看 4.5K关注 0票数 6

我想要一些帮助匹配以下网址。

代码语言:javascript
复制
/settings => /settings.php
/657_46hallo => /657_46hallo.php
/users/create => /users.php/create
/contact/create/user => /contact.php/create/user
/view/info.php => /view.php/info.php
/view/readme - now.txt => /view.php/readme - now.txt
/ => [NO MATCH]
/filename.php => /unknown.php
/filename.php/users/create => /unknown.php

如果域名后的第一部分是以".php“结尾的文件名(参见最后两个示例),则应重定向到/unknown.php

我想我需要2个正则表达式1应该类似于:^/(a-zA-Z0-9_+)(/)?(.*)?$ 2捕获直接文件名"/filename.php“或"/filename.php/create/user”这样我就可以重定向到unknown.php

我得到的第一个正则表达式在第一部分几乎是有效的。==============================================

代码语言:javascript
复制
request url: http://domain.com/user/create
regex: ^/([a-zA-Z0-9_]+)(/)?(.*)?$
replace http://domain.com/$1.php$2$3
makes: http://domain.com/user.php/create

问题是它也与http://domain.com/user.php/create匹配

如果有人能帮助我使用这两个正则表达式,那就太好了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-01 16:39:41

如果你想匹配这些.php案例,你可以尝试这样做:

代码语言:javascript
复制
^\/([a-zA-Z0-9_]+)(\/)?(.*)?$

在Regexr上查看此处

如果你想避免这些情况,试试这个:

代码语言:javascript
复制
^/([a-zA-Z0-9_]+)(?!\.php)(?:(/)(.*)|)$

在Regexr上查看此处

(?!\.php)是一个负面的前瞻,它确保在这个地方没有.php。

票数 1
EN

Stack Overflow用户

发布于 2011-06-01 04:41:30

当你只有一把锤子的时候...

虽然这个问题可能可以用regexp来解决,但是它可能不适合这个任务,除非您有强制使用regexp的限制。

使用'/‘作为分隔符拆分字符串,查看第一个组件是否以'.php’结尾;如果是,则拒绝它,否则将‘.php’附加到第一个组件,并使用'/‘重新连接这些组件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6193254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档