0

我在一个目录中有数千个文件,我正在运行批处理脚本来处理这些文件。

相关文件均以XX-XX-XX开头(至少一个整数,但不超过两个,三个数字用下划线隔开)

我用 txt2re 创建了这个:

 $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";
  }

是否有可能获得一个稍微紧凑的版本,我可以将其与单个函数中的文件名进行比较。

4

2 回答 2

1

你可以使用

"/^\d\d?-\d\d?-\d\d?/"

如果数字由下划线分隔,请使用_而不是-.

于 2013-03-28T15:39:17.533 回答
1

您可以在声明时将所有内容连接在一起。

$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";
}

请注意,我删除了围绕的分组,-因为它们保持不变。您可以在Debuggex逐步了解此正则表达式。

于 2013-03-28T17:47:48.330 回答