正则表达式匹配特定的文件名格式Perl

时间:2014-05-30 17:25:28

标签: regex perl

我正在尝试匹配filename_nrows_ncols的文件名格式。我想出了(_[\d]+_[\d]+)$并在Rubular中进行了测试,它在那里工作。 http://www.rubular.com/r/W7DKNhmpMV 但是当我试图将匹配赋予我的perl代码中的变量时,我得到Use of uninitialized value...错误。我的正则表达式有什么问题?谢谢你。

$match =~ /(_[\d]+_[\d]+)$/;

2 个答案:

答案 0 :(得分:4)

没有看到你的代码,很难说,但我想它应该看起来像这样:

if ($filename =~ /(\d+_\d+)$/) {
  # Do something
}

顺便说一句,在这种情况下,[\ d]周围的[]是不必要的。如果你的内容不是\ d,那就是。

- 编辑 -

我想我明白了什么是错的。你希望正则表达式的结果进入$ match。如果是这种情况,假设您的文件名在默认变量中,那么您可能想要这样:

my ($match) = /(\d+_\d+)$/;

或者它是否在另一个变量

my ($match) = $filename =~ /(\d+_\d+)$/;

顺便说一下,这个错误似乎只是来自"使用警告"或-W。不过,这是一个不错的选择。

答案 1 :(得分:0)

您需要提供导致该错误的整行代码。正则表达式本身看起来很好(尽管如果你打算用文件名,nrows或ncols做任何事情,你可能会更好地使用^(.+)_(\d+)_(\d+)$之类的东西(然后它会存储在$1中,{{分别为1}}和$2