トップページに戻る
次の正規表現パズルへ
前の正規表現パズルへ
7-5 田中哲スペシャルで^[0-9]+$を模倣
正規表現パズル
田中哲スペシャルで
^[0-9]+$
を模倣する。
検索前
検索後
対象データ
111
313
433
123
234
aaaa
a123
a
0000000000
正規表現
^(?<cap>[0-9]\g<cap>|[0-9])$
別解
^(?<cap>[0-9]\g<cap>|[0-9]$)
別解
^(?<rec>[0-9](\g<rec>)*)$
解説
再帰レベル0なら ^[0-9]$
再帰レベル1なら ^[0-9][0-9]$
再帰レベル2なら ^[0-9][0-9][0-9]$
再帰レベル3なら ^[0-9][0-9][0-9][0-9]$
再帰レベル4なら ^[0-9][0-9][0-9][0-9][0-9]$
以下略
といった感じで正規表現を考えると分かりやすいかもしれません。
#Rubyでのソースと実行結果
ConstRegex = Regexp.new('^(?<rec>[0-9](\g<rec>)*)$')
hairetu = Array.new
hairetu.push('111')
hairetu.push('313')
hairetu.push('433')
hairetu.push('123')
hairetu.push('234')
hairetu.push('aaaa')
hairetu.push('a123')
hairetu.push('a')
hairetu.push('0000000000')
puts "Pattern #{ConstRegex.source}"
for i in (0..hairetu.length-1)
willOut = "Line#{i+1} #{hairetu[i]} "
work = ConstRegex.match(hairetu[i]).to_a[0]
if work then
willOut += 'matchs ' + work
else
willOut += 'no match'
end
puts willOut
end
#実行結果
Pattern ^(?<cap>[0-9]\g<cap>|[0-9]$)
Line1 111 matchs 111
Line2 313 matchs 313
Line3 433 matchs 433
Line4 123 matchs 123
Line5 234 matchs 234
Line6 aaaa no match
Line7 a123 no match
Line8 a no match
Line9 0000000000 matchs 0000000000