Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP正则表达式匹配文件或目录_Php_Regex - Fatal编程技术网

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

PHP正则表达式匹配文件或目录,php,regex,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 不匹配: /www/news/index.php /www/site/fr/post.py 这是我一直使用的正则表达式: ^([a-zA-Z0-9/_\-]

给定一个URL路径,我试图创建一个正则表达式来匹配路径是否指向目录,而不匹配路径是否指向文件扩展名.php、.js、.html、.htm等

匹配:

/www/site/path/ny/
匹配:

/www/news/state.208/ii
不匹配:

/www/news/index.php
/www/site/fr/post.py
不匹配:

/www/news/index.php
/www/site/fr/post.py
这是我一直使用的正则表达式:

^([a-zA-Z0-9/_\-]*[^/])$
这个正则表达式符合我的要求,但不够精确。它假定它是一个文件的路径,每当遇到“.”时停止匹配,但是我需要考虑目录名称中包含“.”的可能性,就像上面的例子一样。p> 我还尝试过使用消极的落后表情,但没有成功:

^(.(?!\.php)|(?!\.htm?l)|(?!\.js))$

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

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

这适用于所有示例:

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

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

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

这适用于所有示例:

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

由于您使用的是PHP,您可能希望尝试:


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

由于您使用的是PHP,您可能需要尝试:

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

试试这个小的:

^.*/[^\.]*$
编辑:

用要忽略的扩展替换或扩展。

试试这个小扩展:

^.*/[^\.]*$
编辑:



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

句点是什么意思?句点是一个“句号”或。'您还没有指定使用它的目的,但PHP在这方面有很多内置函数--PHP的
文件\u exists()
是\u dir()
路径信息()
基本名称()
,在这里,其他函数可能比复杂的正则表达式更合适。句点是什么意思?句点是一个“句号”或“.”您还没有指定使用它的目的,但PHP在这方面有很多内置函数——PHP的
file_exists()
is_dir()
pathino()
basename()
,在这里,其他函数可能比复杂的正则表达式更合适。好主意,除了我需要这是一个用于各种类型的正则表达式之外reasons@deraad-如果你解释这些“各种原因”,可能会帮助你获得有用的答案。从您目前所说的来看,正则表达式听起来不是合适的解决方案。@SDC我需要正则表达式形式的正则表达式,因为它不仅会出现在PHP函数中,还会出现在htaccess文件中。如果我只在我的PHP脚本中使用它,我会使用像pathinfo()这样的PHP函数,这是一个好主意,除了我需要它成为各种类型的正则表达式之外reasons@deraad-如果你解释这些“各种原因”,可能会帮助你获得有用的答案。从您目前所说的来看,正则表达式听起来不是合适的解决方案。@SDC我需要正则表达式形式的正则表达式,因为它不仅会出现在PHP函数中,还会出现在htaccess文件中。如果我只在PHP脚本中使用它,我会使用像pathinfo()这样的PHP函数,它不一定要以“/”开头。可能是,也可能不是。为了简化它,应该查找包含以下内容的字符串:a-zA-Z0-9/\.-并且不以文件扩展名结尾。感谢您的编辑,但它似乎仍然与“www/fr/this.php”匹配,我试图使其在结尾有文件扩展名时不匹配。它不必以“/”开头。可能是,也可能不是。为了简化它,应该查找包含:a-zA-Z0-9/\.-的字符串,而不是以文件扩展名结尾。感谢您的编辑,但它似乎仍然与“www/fr/this.php”匹配,我试图在结尾有文件扩展名时使其不匹配。这几乎可以工作,只是它与目录:“/www/ww.news4”不匹配@deraad:请参见编辑。当您告诉您希望忽略“文件扩展名”时,使用正则表达式实现该功能的唯一方法是定义一个不需要的扩展名列表。这几乎可以实现,只是它与目录“/www/ww.news4”不匹配。@deraad:请参见“编辑然后”。当您告诉您希望忽略“文件扩展名”时,使用正则表达式实现它的唯一方法是定义一个不需要的扩展名列表。