这可能是初学者的错误 正则表达式总是不匹配,但显然它应该。
#!/usr/bin/perl
# This will print "Hello, World"
print "Hello, world\n";
my $addr = "Hello";
#if($addr =~ /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\)/ )
if (my $addr =~ /Hello/)
{
print("matched\n\n");
}else
{
print("Didnt Match\n\n");
}
答案 0 :(得分:3)
my
使您在本地和未初始化时匹配的变量。
所以你应该改为
if ($addr =~ /Hello/)
my
表示if中的$addr
是"我自己的",即与另一个$addr
不同的外部范围较大的fileName.matches("[-_. A-Za-z0-9]+\\.(pdf|txt|csv)");
。
只有外部范围变量初始化为与正则表达式匹配的东西。第二个,内部的没有初始化,并且(至少在你的情况下)没有匹配的值。
注意:其他作者的评论提出了在将来的编程中避免/发现问题原因的最佳实践。
答案 1 :(得分:1)
我知道这已经得到了解答,但让我稍稍展开一下。
一般来说,如果我们可以称之为perl,我们会在块中工作。如果你设置
my $string = 'String';
在脚本的开头,在任何循环之外,该声明将在整个脚本中保留字符串,除非您在该行的某处重新声明或重新分配它。
my $string = 'string';
$string = 'Text';
如果你在一个街区内工作,那会有所改变,让我们在if语句中说:
情景1。
my $var = 'test';
if ($var =~ /test/) {
my $string = 'string';
}
print $string; # This will not work as $string only existed in the if block.
以下是相同的场景,但您在if块中重新声明$var
,因此它将尝试匹配没有值的新变量,因此在此实例中$string
将永远不会设定。
情景2。
my $var = 'test';
if (my $var =~ /test/) {
my $string = 'string';
}
还有另一个与my
的工作方式不同,即our
情景3。
my $var = 'test';
if ($var =~ /test/) {
our $string = 'string';
}
print $string;
上面的场景与场景1有点不同。我们在if语句块中声明our $string
,现在我们可以在该循环之外使用$ string,因为our
正在说任何块来自在这里,拥有这个变量。
答案 2 :(得分:0)
U在if的范围内初始化了另一个名为$ addr的变量,而不是使用在全局范围内初始化的变量。
#!/usr/bin/perl
# This will print "Hello, World"
print "Hello, world\n";
my $addr = "Hello";
#if($addr =~ /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\)/ )
if ($addr =~ /Hello/)
{
print("matched\n\n");
}else
{
print("Didnt Match\n\n");
}