脳ざらし紀行


2004-06-27

_ [ネット] *marunouchi.tokyo.ocn.ne.jp つづき

RewriteCond %{REMOTE_ADDR}	^61\.112\.(7[2-9]|8[0-1])\. [OR]
RewriteCond %{REMOTE_ADDR}	^61\.199\.4[1-8]\. [OR]
RewriteCond %{REMOTE_ADDR}	^219\.114\.(2[6-9]|3[0-9]|4[0-1])\.  [OR]
RewriteCond %{REMOTE_ADDR}	^219\.160\.1(2[5-9]|[3-5][0-9]|60)\. [OR]
RewriteCond %{REMOTE_ADDR}	^219\.165\.([1-9]|1[0-5])\. [OR]
RewriteCond %{REMOTE_ADDR}	^220\.104\.1(1[1-9]|[2-4][0-9]|50)\. [OR]
RewriteCond %{REMOTE_ADDR}	^220\.97\.(1[8-9]|[2-3][0-9]|4[0-1])\. [OR]
RewriteCond %{REMOTE_ADDR}	^221\.188\.(9|(1[0-9]|[2-7][0-9]|8[0-3]))\. [OR]
RewriteCond %{REMOTE_ADDR}	^221\.189\.1(7[4-9]|8[0-1])\. [OR]
RewriteCond %{REMOTE_ADDR}	^222\.146\.(1(0[5-9]|[1-8][0-9]|9[0-9])|20[0-3])\.

副産物。はじめと終りの数字をあたえると、その間の数字にマッチする正規表現を返す Ruby スクリプト。

# $ ruby reg.rb 1 4 
# [1-4]
# $ ruby reg.rb 10 43 
# (1[0-9]|[2-3][0-9]|4[0-3])

def reg(s, e)
  raise if s.to_i > e.to_i
  if s.size == e.size
    reg_p(s, e)
  else
    '(' + reg(s, '9' * s.size) + '|' + reg( '1' + '0' * s.size, e) + ')'
  end
end

def reg_p(s, e)
  s = s.to_s
  e = e.to_s
  if s == e
    s
  elsif e.size == 1
    '[' + s + '-' + e + ']'
  elsif s[0, 1] == e[0, 1]
    s[0, 1] +  reg(s[1..-1], e[1..-1]) 
  else
    nines = '9' * (s.size - 1)
    zeros = '0' * (s.size - 1)
    if s[0, 1].next == e[0, 1]
      '(' + 
       reg(s, s[0, 1] + nines) +
       '|' +
        reg(e[0, 1] + zeros, e) + 
      ')'
    else
    '(' +
     reg(s, s[0, 1] + nines) +
      '|' +
      reg(s[0, 1].next, (e[0, 1].to_i - 1).to_s) + '[0-9]' * (s.size - 1) +
      '|' +
      reg(e[0, 1] + zeros, e) + ')'
    end
  end          
end
puts reg(ARGV[0], ARGV[1]) 
お名前:
E-mail:
コメント:
本日のリンク元

最近のコメント

2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|04|05|
2011|04|
2012|03|07|
2013|01|02|07|
トップ «前の日記(2004-06-26) 最新 次の日記(2004-06-28)» 編集