Php 限制以特定方式开始的文件名匹配
我在一个目录中有数千个文件,我正在运行一个批处理脚本来处理这些文件 相关文件均以XX-XX-XX开头(至少一个整数,但不超过两个,三个数字之间用下划线分隔) 我使用txt2re创建了以下内容:Php 限制以特定方式开始的文件名匹配,php,regex,Php,Regex,我在一个目录中有数千个文件,我正在运行一个批处理脚本来处理这些文件 相关文件均以XX-XX-XX开头(至少一个整数,但不超过两个,三个数字之间用下划线分隔) 我使用txt2re创建了以下内容: $txt='1-2-3'; $re1='(\\d+)'; # Integer Number 1 $re2='(-)'; # Any Single Character 1 $re3='(\\d+)'; # Integer Number 2 $re4='(-)'; #
$txt='1-2-3';
$re1='(\\d+)'; # Integer Number 1
$re2='(-)'; # Any Single Character 1
$re3='(\\d+)'; # Integer Number 2
$re4='(-)'; # Any Single Character 2
$re5='(\\d+)'; # Integer Number 3
if ($c=preg_match_all ("/".$re1.$re2.$re3.$re4.$re5."/is", $txt, $matches))
{
$int1=$matches[1][0];
$c1=$matches[2][0];
$int2=$matches[3][0];
$c2=$matches[4][0];
$int3=$matches[5][0];
print "($int1) ($c1) ($int2) ($c2) ($int3) \n";
}
有没有可能得到一个更紧凑的版本,我可以在单个函数中与文件名进行比较。您可以使用
"/^\d\d?-\d\d?-\d\d?/"
如果数字之间用下划线分隔,则使用
\uuu
而不是-
您可以在声明时将所有内容连接在一起
$txt='1-2-3';
$re = '/(\d+)-(\d+)-(\d+)/is';
if ($c=preg_match_all ($re, $txt, $matches))
{
$int1=$matches[1][0];
$int2=$matches[2][0];
$int3=$matches[3][0];
print "($int1) (-) ($int2) (-) ($int3) \n";
}
注意,我删除了
-
周围的分组,因为它们保持不变。您可以在一步一步地浏览此正则表达式。我不确定您在这里想做什么。你想要布尔测试还是别的什么?在任何情况下,正确的正则表达式都是^\d{1,2}-\d{1,2}-\d{1,2}
。