给定一个URL路径,我试图创建一个正则表达式,如果路径指向一个目录,则匹配,如果它指向文件扩展名.php,.js,.html,.htm等,则不匹配。
匹配度:
/www/site/path/ny/
匹配:
/www/news/state.208/ii
不匹配:
/www/news/index.php
不匹配:
/www/site/fr/post.py
这是我一直在使用的正则表达式:
^([a-zA-Z0-9/_\-]*[^/])$
这个正则表达式做了我想要的,但它不够精确。它假定它是文件的路径,并且只要遇到“。”就会停止匹配,但我需要考虑目录名称包含“。”的可能性,就像上面的示例一样。
我也试过使用负面看后面没有运气:
^(.(?!\.php)|(?!\.htm?l)|(?!\.js))$
答案 0 :(得分:2)
由于您使用的是PHP,因此您可能需要尝试使用pathinfo
:
$parts = pathinfo('/www/site/path/file.php');
在这种情况下,$parts['extension']
将存在,在其他情况下则不存在。
答案 1 :(得分:2)
试试这个小小的:
^.*/[^\.]*$
编辑:
^.*/((?!\.js|\.php|\.html).)*$
使用您要忽略的扩展名替换或扩展。
答案 2 :(得分:1)
为简化您的问题,您正在寻找以/开头的字符串,而最后一段没有扩展名:
[\/]{0,1}.*\/[^\.]*.{1}$
编辑:
这适用于您的所有示例:
^(.*\/){0,1}[^\.]*.{1}$