Php 正则表达式试图找到与模式匹配的文件名

Php 正则表达式试图找到与模式匹配的文件名,php,regex,Php,Regex,我的正则表达式很烂。我有一个php函数,可以读取服务器上的文件名目录,我试图从一个特定的文件名中提取文件名数据,但失败得很惨。以下是我迄今为止所做的: $file = 'VERSION_3.7.1b.txt'; $VersionNumber = preg_match('#^(VERSION_)[^\s]*\.\.[^\s]+(\.(txt))#', $file); 我正在尝试让preg_匹配仅对以“VERSION_u”开头并以“.txt”结尾的文件返回true。中间的东西可以是各种各样的数字、

我的正则表达式很烂。我有一个php函数,可以读取服务器上的文件名目录,我试图从一个特定的文件名中提取文件名数据,但失败得很惨。以下是我迄今为止所做的:

$file = 'VERSION_3.7.1b.txt';
$VersionNumber = preg_match('#^(VERSION_)[^\s]*\.\.[^\s]+(\.(txt))#', $file);
我正在尝试让preg_匹配仅对以“VERSION_u”开头并以“.txt”结尾的文件返回true。中间的东西可以是各种各样的数字、字母、句号……这就是我想要返回的部分。因此,在本例中,我希望$VersionNumber最终设置为“3.7.1b”

其他将返回某些内容的文件名如下:

VERSION_3.txt  ->  3
VERSION_3.7.txt  ->  3.7
VERSION_3.7e.1.txt  ->  3.7e.1
VERSION_2012.09.13.3.7.1b.txt  ->  2012.09.13.3.7.1b
VERSION_3.7.20120913.txt  ->  3.7.20120913

如果我离得很近,有没有能向我解释的regex大师?谢谢

您还需要为$matches传递一个变量

我简化了你的RegExp。试试这个:

$file = 'VERSION_3.7.1b.txt';
preg_match('/^VERSION_(.*?)\.txt/', $file, $matches);
echo $matches[1];

是的。还要考虑PrimgFiFrter()来做一个数组字符串,只返回它们的版本号…代码>$versionNos=preg_过滤器($regex,$1',$filename)