Cec*_*org 6 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
Run Code Online (Sandbox Code Playgroud)
如果域名后面的第一部分是以".php"结尾的文件名(参见最后2个例子)它应该重定向到/unknown.php
我想我需要2个正则表达式1st应该几乎像:^ /([a-zA-Z0-9 _] +)(/)?(.*)?$ 2来捕获直接文件名"/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
Run Code Online (Sandbox Code Playgroud)
问题是它也匹配http://domain.com/user.php/create
如果有人可以用两个正常的表达方式来帮助我,那就太好了.
如果您想匹配这些.php情况,您可以尝试以下操作:
^\/([a-zA-Z0-9_]+)(\/)?(.*)?$
Run Code Online (Sandbox Code Playgroud)
如果您想避免这些情况,请尝试以下操作:
^/([a-zA-Z0-9_]+)(?!\.php)(?:(/)(.*)|)$
Run Code Online (Sandbox Code Playgroud)
这是一个消极的展望,确保这个地方(?!\.php)没有。.php