変数と照合したい$x = 'AA12CB'
。正規表現を使用しています
$x =~ /\b[0-9]+\b/
私は数字だけを持っていて、アルファベット文字は持っていないことを主張したいと思います。この正規表現は機能していません。
変数と照合したい$x = 'AA12CB'
。正規表現を使用しています
$x =~ /\b[0-9]+\b/
私は数字だけを持っていて、アルファベット文字は持っていないことを主張したいと思います。この正規表現は機能していません。
他の文字を除外するには、文字列の最初と最後にパターンを固定する必要があります。\b
これは、境界で試したものと似ています。アンカリングの意味についてはperlretutを読んでください。
use 5.010;
my $x = 'AA12CB';
if ($x =~ /\A [0-9]+ \z/msx) {
say 'only digits'
} else {
say 'not only digits'
}
行末のない文字列の場合、この式はその基準を最もよく捉えていると思います:
$x !~ /\D/
$x
これは、数字以外の文字とはまったく一致しないことを意味します。もちろん、編集されていない文字列の行末が必要chomp
な場合は、次のように負の文字クラスを使用する必要があります。
$x !~ /[^\d\n]/
つまり$x
、数字または改行以外の文字を含む文字列には一致しません。
これはPerlでも機能するはずです。
$x = "AA12CB";
unless($x=~m/\D/) {
print("$x: Just digits\n");
}
else {
print("$x: Not just digits\n\n");
}
$x = "1223456";
unless($x=~m/\D/) {
print("$x: Just digits\n");
}
else {
print("$x: Not just digits\n");
}
\D
ここでの鍵です。数字以外のものと一致します。if
これは、 andelse
ではなくunless
andとして簡単に記述できますelse
。
数値性のテストの直後であれば、Scalar::Util
のlooks_like_number
関数で十分です。
use Scalar::Util 'looks_like_number';
print looks_like_number( $x )
? "$x is numeric\n"
: "$x is non-numeric\n";
'0 but true'
あなたのアプリケーションで風変わりなことが起こるとは思いません...