0

ディレクトリに何千ものファイルがあり、バッチ スクリプトを実行して処理しています。

関連するファイルはすべて XX-XX-XX で始まります (少なくとも 1 つの整数、ただし 2 つ以下の整数で、3 つの数字はアンダースコアで区切られています)

これを作成するために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

宣言時にすべてを連結できます。

$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 に答える
1

あなたが使用することができます

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

数字がアンダースコアで区切られている場合は、_代わりに-.

于 2013-03-28T15:39:17.533 に答える