• ベストアンサー

ある特定の数字に対する正規表現

例えばですが、 $aには、変動する数字が代入されているとします。 【$aが、2000で割り切れる値であるとき、真を返す】 もしくは、 【下4桁が、2000・4000・6000・8000・0000のいずれかであるならば、真を返す】 としたい場合には、どのようなソースになりますか? ご教授お願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

>【$aが、2000で割り切れる値であるとき、真を返す】 数値としてとらえた場合、「2000で割った余りが0かどうか」なので 「if ( $a % 2000 ) == 0 )」のような判定をします。 >perl -ne '$a = $_; if ( ( $a % 2000 ) == 0 ) { print "ok\n" } else { print "ng\n" }' 10000 ok 11000 ng 12000 ok >【下4桁が、2000・4000・6000・8000・0000のいずれかであるならば、真を返す】 文字列としてとらえた場合、「if ( $a =~ /[02468]000$/ )」という正規表現を使った判定をします。 >perl -ne '$a = $_; if ( $a =~ /[02468]000$/ ) { print "ok\n" } else { print "ng\n" }' 12000 ok 13000 ng 14000 ok

unipre
質問者

お礼

あっ、メタ文字が入ってました… おかげさまで解決しました♪ ありがとうございました。

unipre
質問者

補足

アドバイスありがとうございます! 下4桁のほうの( $a =~ /[02468]000$/ )ですと、 $aが例えば20001のときでも真が返ってきませんでしょうか?

その他の回答 (1)

  • iichiho
  • ベストアンサー率37% (416/1114)
回答No.1

【下4桁が、2000・4000・6000・8000・0000のいずれかであるならば、真を返す】場合です。 if(($a=~/2000$/)||($a=~/4000$/)||($a=~/6000$/)||($a=~/8000$/)||($a=~/000$/)){ 真を返す処理; } あんまりスマートじゃないかもしれませんが。

unipre
質問者

お礼

最後の($a=~/000$/)は ($a=~/0000$/)ですよね?(;´∀`) もう少し勉強してからスマートなものにしていこうと思います。 ありがとうございました。

関連するQ&A