木村です。

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

-- 
木村浩一