没有文件扩展名的正则表达式匹配 url

标签 regex replace preg-match

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

/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”结尾的文件名
(见最后 2 个例子)它应该重定向到/unknown.php

我想我需要 2 个正则表达式
第一应该几乎是这样的:^/([a-zA-Z0-9_]+)(/)?(.*)?$
第二个捕捉直接文件名“/filename.php”或“/filename.php/create/user”
所以我可以重定向到unknown.php

我得到的第一个正则表达式几乎适用于第一部分。
==============================================
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

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

最佳答案

当你只有一把锤子...

虽然这可能可以用正则表达式解决,但它可能是错误的工作工具,除非您有强制使用正则表达式的约束。

以'/'为分隔符分割字符串,看第一部分是否以'.php'结尾;如果是,拒绝它,否则将 '.php' 附加到第一个组件并使用 '/' 连接组件。

关于没有文件扩展名的正则表达式匹配 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6193254/

相关文章:

php - 我将如何使用 PHP preg_replace 进行以下替换?

Python翻译器,如何只替换一个单词

javascript - 正则表达式在替换函数中使用变量无需重复

php - 哪个正则表达式可以找到一组数字?

php - Preg 替换直到点,包括那个

javascript - 正则表达式用链接替换网址

java - 用于检查代码是否包含非 UTF-8 字符的正则表达式?

r - 我能合理拆分这些数字串吗?

Java字符串方法,将所有2个或更多空格的序列替换为单个空格

php - preg_match 从字符串返回多个值