1

パスをベースパスの可能性のある膨大なリスト(多くのディレクトリレベル上にある可能性があります)と一致させるための最適な方法が必要です。ベースパス自体は、有効なシェルグロブパスである可能性があります

例えば

以下のリストのパス/a/b-12/c/d/e/fg/hi/94.txtを一致させる必要があります。

  1. / a / b-* / e
  2. / x / y *
  3. / x / {a、b、s *} e
  4. / a / {a、b *、c} 2 / c / d
  5. / a / b * / c / e
  6. ..。

リストは長く、そのようなパスは10Kです。可能性のある親パスを特定したら、パスなどへのchdir/cdで確認できます。

リストで正規表現を一致させたいのですが、シェルのグロブパスを一致させるのは困難です。これで私を助けることができるPerlモジュールはありますか?

ありがとう!

4

1 に答える 1

1

Text::GlobCPANから試すこともできます。を使用する必要はありませんglob_to_regex。私はちょうどそれで遊んでいましたが、これは一致します:

#!/usr/bin/env perl
use strict;
use warnings;
use Text::Glob qw(glob_to_regex);

my @arr = ('/a/b-12/c/d/e/fg/hi/94.txt');

my $regex = glob_to_regex('/a/{a,b*,c}2/c/d/e/fg/hi/94.txt');
print "REGEX: $regex\n";
if ($arr[0] =~ m/$regex/) {
  print "Matches\n";
}
于 2012-09-15T09:03:48.237 に答える