木村です。 On Thu, 19 Jun 2008 13:22:35 +0900 "西塔伸一郎" <omohideporoporo / tvoyama.ne.jp> wrote: > こんにちは。 > 正規表現の書き方について困っているので御教授下さい。 > 1〜7桁からなる数字(左がゼロ埋めされている場合も有り)か判定したいので > 以下の正規表現を考えました。 > /\A[0-9]{1,7}\z/ > これで上手くいったのですが、7桁全てゼロで埋められている数字"0000000"は > マッチして欲しくないのです。 > > 正規表現で上手く書く方法はあるでしょうか? 1.9 だと否定形の先読みを使って /\A(?!0{7})[0-9]{1,7}+\z/ と書けますが 1.8ではなんか上手く動かないですね。 いずれにしろ、二段構えでやるのがわかりやすくていいと思います。 sample = %w[0 0123 3456 000000 0000006 0000000 0123456] sample.each do |i| puts "try #{i}" #puts i if /^(?!0{7})[0-9]{1,7}+$/.match(i) puts i if /\A[0-9]{1,7}\Z/.match(i) && !/0{7}/.match(i) end try 0 0 try 0123 0123 try 3456 3456 try 000000 000000 try 0000006 0000006 try 0000000 try 0123456 0123456 -- 木村浩一