PHP正则表达式匹配文件或目录

时间:2012-12-07 12:28:49

标签: php regex

给定一个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))$

3 个答案:

答案 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}$