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