Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.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
Perl:Regex(匹配重复)_Regex_Perl - Fatal编程技术网

Perl:Regex(匹配重复)

Perl:Regex(匹配重复),regex,perl,Regex,Perl,我有一个简短的问题。以下代码中我做错了什么: #!/usr/bin/perl -w use strict; my $num = "12345"; print "$num \n" if $num =~ m/\d{1,3}/; 因为我的数字是5位数,所以我希望输出不打印任何内容,因为if语句正在寻找一个至少有1位数,最多有3位数的数字。但我的脚本输出如下: # perl num.pl 12345 我是否误解了上面的正则表达式 谢谢 编辑: 所以,实际上我正在尝试匹配一个IP地址,比如字符串。

我有一个简短的问题。以下代码中我做错了什么:

#!/usr/bin/perl -w
use strict;
my $num = "12345";
print "$num \n" if $num =~ m/\d{1,3}/;
因为我的数字是5位数,所以我希望输出不打印任何内容,因为if语句正在寻找一个至少有1位数,最多有3位数的数字。但我的脚本输出如下:

# perl num.pl 
12345 
我是否误解了上面的正则表达式

谢谢

编辑:

所以,实际上我正在尝试匹配一个IP地址,比如字符串。e、 g.我想匹配
11.222.3.444
,但它不能与
m/\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}/
因此,我开始处理一个只包含数字的字符串,然后将其发布到堆栈溢出中

如果我必须放入^或$,那么如果我想匹配上面提到的字符串s这样的IP地址,我应该如何使用它们呢


谢谢您的时间。

您的perl代码说的是,“在字符串$num中,您可以找到一个字符串,至少1个字符,最多3个字符,仅由数字组成。”答案当然是肯定的

你想要的是

如果$num=~m/^\d{1,3}$/,则打印“$num\n”

这意味着“在字符串$num中,从第一个字符开始,到最后一个字符,是否有一个字符串长度至少为1个字符,最多为3个字符,仅由数字组成。”

如果您正在尝试查找类似ip地址的内容
下面的代码正确验证了IP地址。 下面列出了所考虑的验证。 1) 如果由小数点分隔的IP地址的任何部分的长度超过一位,则不应以零开始。 2) 由小数点分隔的第一个IP地址不能为零。 3) 以小数点分隔的IP地址的任何部分都不能超过255

要求成员对正则表达式进行微调,因为它看起来太大和混乱

print "Enter the IP address : ";
$ip = <stdin>;
if($ip =~ /^([3-9]\d?|1\d?\d?|2([0-4]?\d?|5[0-5]|[6-9]?))(\.(0|[3-9]\d?|(1\d?\d?|2([0-4]?\d?|5[0-5]|[6-9]?)))){3}$/) {
    print "Correct\n";
}
else {
    print "Wrong\n";
}
print“输入IP地址:”;
$ip=;
如果($ip=~/^([3-9]\d?\d?\d?\d?;2([0-4]?\d?;5[0-5]|[6-9]?)(\(0-3-9]\d?)(1\d?\d?;2([0-4]?\d?)5[0-5]|[6-9])){3}$/){
打印“正确的\n”;
}
否则{
打印“错误”\n;
}

您缺少锚<代码> ^ 和<代码> $< /代码>。为了匹配IP地址,请考虑使用。您忘了逃出<代码>。< /代码>使用<代码> \/COD>谢谢您的时间米歇尔。请你检查一下我在原帖中所做的编辑,并给我相应的指导。谢谢。这个看起来很好:
m/^\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}$/
你试过了吗?例如,这与
9558.7506.5556.4545
匹配。是的,我试过了。。。。下面是我使用输入值执行代码时得到的结果。$perl ip.pl输入ip地址:9558.7506.5556.4545错误是的,您的回答是正确的,但它验证了
955.955.955.955
。您好M42,感谢您的反馈。我已经修改了上面的正则表达式。现在看来不错。如果收到进一步的意见,我们将很高兴对其进行改进。正则表达式已被修改。如果有帮助,请一定告诉我。请专家做回顾,让我知道如何让我更容易理解。