2

変数と照合したい$x = 'AA12CB'。正規表現を使用しています

$x =~ /\b[0-9]+\b/

私は数字だけを持っていて、アルファベット文字は持っていないことを主張したいと思います。この正規表現は機能していません。

4

4 に答える 4

4

他の文字を除外するには、文字列の最初と最後にパターンを固定する必要があります。\bこれは、境界で試したものと似ています。アンカリングの意味についてはperlretutを読んでください。

use 5.010;
my $x = 'AA12CB';
if ($x =~ /\A [0-9]+ \z/msx) {
    say 'only digits'
} else {
    say 'not only digits'
}

おそらく、スカラーが number/whole/integer/float かどうかを判断したいでしょう。

于 2012-05-30T07:40:30.663 に答える
2

行末のない文字列の場合、この式はその基準を最もよく捉えていると思います:

$x !~ /\D/

$xこれは、数字以外の文字とはまったく一致しないことを意味します。もちろん、編集されていない文字列の行末が必要chompな場合は、次のように負の文字クラスを使用する必要があります。

$x !~ /[^\d\n]/

つまり$x、数字または改行以外の文字を含む文字列には一致しません。

于 2012-05-30T11:37:13.867 に答える
1

これは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ではなくunlessandとして簡単に記述できますelse

于 2012-05-30T09:23:46.910 に答える
1

数値性のテストの直後であれば、Scalar::Utillooks_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'あなたのアプリケーションで風変わりなことが起こるとは思いません...

于 2012-05-30T10:11:30.223 に答える