0

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

3 回答 3

2

由于您使用的是 PHP,因此您可能想尝试一下pathinfo

$parts = pathinfo('/www/site/path/file.php');

在这种情况下$parts['extension']会存在,在其他情况下则不会。

于 2012-12-07T12:38:34.980 回答
2

试试这个小小的:

^.*/[^\.]*$

编辑:

^.*/((?!\.js|\.php|\.html).)*$

替换或扩展您要忽略的扩展名。

于 2012-12-07T12:38:59.800 回答
1

为了简化您的问题,您正在寻找以 / 开头的字符串,并且最后一段没有扩展名:

[\/]{0,1}.*\/[^\.]*.{1}$

编辑:

这适用于您的所有示例:

^(.*\/){0,1}[^\.]*.{1}$
于 2012-12-07T12:38:31.930 回答