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等中“自动”访问。