0

簡単な質問があります。以下のコードで何が間違っていますか:

#!/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 アドレスを照合しようとしています。たとえば、一致させたいのです11.222.3.444が、うまくいかなかったm/\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}/ ので、数字のみを含む単一の文字列で作業を開始したため、これをスタックオーバーフローに投稿しました。

^ または $ を入力する必要がある場合、上記の文字列のように IP アドレスを一致させたい場合、それらをどのように使用すればよいでしょうか。

ありがとうございました。

4

2 に答える 2

2

あなたの perl コードは、「文字列 $num の中に、少なくとも 1 文字、最大 3 文字の数字のみで構成された文字列を見つけることができますか?」と言っています。もちろん答えはイエスです。

あなたが欲しいのは

print "$num \n" if $num =~ m/^\d{1,3}$/;

これは、「文字列 $num の最初の文字から始まり、最後の文字まで、少なくとも 1 文字、最大で 3 文字の数字のみで構成される文字列が存在する」ことを意味します。

IPアドレスに一致するIPアドレス正規表現のようなものを見つけようとしている場合は 、それを行う方法についての良い議論です.

于 2012-09-07T06:25:45.983 に答える
0

以下のコードは、IP アドレスを正しく検証します。考慮される検証を以下に示します。1) 10 進数で区切られた IP アドレスの任意の部分の長さが 1 桁を超える場合は、ゼロで開始しないでください。2) 10 進数で区切られた 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";
}
于 2014-03-26T12:48:10.050 に答える