Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式匹配特定的文件名格式Perl_Regex_Perl - Fatal编程技术网

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

Regex 正则表达式匹配特定的文件名格式Perl,regex,perl,Regex,Perl,我正在尝试匹配文件名格式,即filename\u nrows\u ncols。我提出了(\u[\ d]+\u[\ d]+)$,并在Rubular中测试了它,它在那里工作。 但是当我试图将匹配与perl代码中的一个变量关联时,我得到了未初始化值的使用…错误。我的正则表达式怎么了?谢谢你 $match =~ /(_[\d]+_[\d]+)$/; 如果没有看到您的代码,很难说,但我想它应该是这样的: if ($filename =~ /(\d+_\d+)$/) { # Do something

我正在尝试匹配文件名格式,即
filename\u nrows\u ncols
。我提出了
(\u[\ d]+\u[\ d]+)$
,并在Rubular中测试了它,它在那里工作。 但是当我试图将匹配与perl代码中的一个变量关联时,我得到了
未初始化值的使用…
错误。我的正则表达式怎么了?谢谢你

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

如果没有看到您的代码,很难说,但我想它应该是这样的:

if ($filename =~ /(\d+_\d+)$/) {
  # Do something
}
顺便说一句,在这种情况下不需要[\d]左右的[]。如果其中有\d以外的内容,则可能是

--编辑--

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

my ($match) = /(\d+_\d+)$/;
或者如果它在另一个变量中

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

顺便说一句,该错误似乎只是来自“使用警告”或-W的警告。不过,这是一个很好的警告。

您需要提供导致该错误的整行代码。正则表达式本身看起来很好(尽管如果您计划对文件名、nrows或ncol(然后将分别存储在
$1
$2
$3
中)执行任何操作,则最好分别使用
^(+)\ud+\ud+$

Rubular中的$。它确实匹配整个字符串,但也匹配整个字符串。
^(+)
。那么它如何存储在
$1
$2
$3
中呢?括号用作分组运算符,每个组的匹配文本可以在$1、$2等中“自动”访问。