paizaラーニング解答: 正規表現メニュー[Ruby]

# 正規表現メニュー
https://paiza.jp/works/mondai/regular_expression/problem_index?language_uid=ruby

## STEP: 1 文字列の検索
```ruby
s = gets.chomp
puts s.index(/paiza/)
```

## STEP: 2 メタ文字の検索
```ruby
s = gets.chomp
puts s.index(/\\\(\^\ \.\ \^\)\//)
```

## STEP: 3 任意文字の検索
```ruby
s = gets.chomp
puts s.index(/p..za/)
```

## STEP: 4 クラス指定文字の検索
```ruby
s = gets.chomp
puts s.index(/Math[123][ABC]/)
```

## STEP: 5 クラスの否定の検索
```ruby
s = gets.chomp
puts s.index(/[^0123456789]...../)
```

## STEP: 6 範囲指定文字の検索
```ruby
s = gets.chomp
puts s.index(/[A-Z]\-[0-9][0-9][ab]/)
```

## STEP: 7 0 回または 1 回の出現の検索
```ruby
s = gets.chomp
puts s.index(/clang-?format/)
```

## STEP: 8 0 回以上の繰り返しの検索
```ruby
s = gets.chomp
puts s.index(/congratulations!*/)
```

## STEP: 9 1 回以上の繰り返しの検索
```ruby
s = gets.chomp
puts s.index(/ID-[0-9]+/)
```

## STEP: 10 指定回数の繰り返しの検索
```ruby
s = gets.chomp
puts s.index(/CVE-[0-9]{4}-[a-zA-Z0-9]+/)
```

## STEP: 11 下限指定の繰り返しの検索
```ruby
s = gets.chomp
puts s.index(/To be continued\.{3,}/)
```
ジョジョの次回予告ミームを思い出した。
## STEP: 12 上限指定の繰り返しの検索
```ruby
s = gets.chomp
puts s.index(/database_.{,5}\.db/)
```
御御御付けで「おみおつけ」。
## STEP: 13 範囲指定の繰り返しの検索
```ruby
s = gets.chomp
puts s.index(/\$[0-9]{3,5}/)
```

## STEP: 14 OR の検索
```ruby
s = gets.chomp
puts s.index(/accept|reject|pending/)
```

## STEP: 15 グループを利用した OR の検索
```ruby
s = gets.chomp
puts s.index(/[^ ]*(\.jpg|\.png)/)
```

## STEP: 16 グループを用いた繰り返しの検索
```ruby
s = gets.chomp
puts s.index(/(%[a-zA-Z0-9]{2}){2,}/)
```

## STEP: 17 行頭の検索
```ruby
s = gets.chomp
puts s.match(/^Re:/) ? "Yes" : "No"
```

## STEP: 18 行末の検索
```ruby
s = gets.chomp
puts s.index(/\\\(.*\\\)$/)
```
## FINAL問題 エスケープシーケンスの検索
```ruby
s = gets.chomp
puts s.index(/\w{3}-\d{3,4}/)
```
・\d 半角数字 1 文字 (d は digit の略)
・\D 半角数字以外の 1 文字
・\s 空白文字 (スペース, タブ, 改行) 1 文字 (s は space の略)
・\S 空白文字以外の 1 文字
・\w 半角英数字記号 1 文字 (w は word の略)
・\W 半角英数字記号以外の 1 文字
・\n 改行文字
・\t タブ文字
・\A 文字列の先頭
・\Z 文字列の末尾

## STEP: 1 文字列の検索
```ruby
s = gets.chomp
puts s.index(/[\da-f]{64}/)
puts s.match(/[\da-f]{64}/)
```

## STEP: 2 文字列の全検索
```ruby
s = gets.chomp
puts s.scan(/[^ ]+@[^ ]+/)
```

## STEP: 3 文字列の置換
```ruby
s = gets.chomp
puts s.sub(/(\d{2})\.(\d{2})/, '\1/\2')
```

## STEP: 4 文字列の全置換
```ruby
s = gets.chomp
puts s.gsub(/raw_input/, 'input')
```

## STEP: 5 文字列の削除
```ruby
s = gets.chomp
puts s.sub(/\/\*.*\*\//, '')
```

## STEP: 6 文字列の全削除
```ruby
s = gets.chomp
puts s.gsub(/import \w+/, '')
```

## FINAL問題 文字列の分割
```ruby
s = gets.chomp
puts s.split(/-{3,}/)
```

## STEP: 1 最短一致と 0 回または 1 回の繰り返し
```ruby
s = gets.chomp
puts s.index(/G[A-Z]??C/)
puts s.match(/G[A-Z]??C/)
```

## STEP: 2 最短一致と 0 回以上の繰り返し
```ruby
s = gets.chomp
puts s.index(/\{.*?\}/)
puts s.match(/\{.*?\}/)
```

## STEP: 3 最短一致と 1 回以上の繰り返し
```ruby
s = gets.chomp
puts s.index(/\#.+? /)
puts s.match(/\#.+? /)
```

## STEP: 4 最短一致と指定回数の繰り返し
```ruby
s = gets.chomp
puts s.index(/\|.{3,10}?\|/)
puts s.match(/\|.{3,10}?\|/)
```

## STEP: 5 キャプチャとその回避
```ruby
s = gets.chomp
t = s.match(/(?:n|st|vac)ation(\w+)/)
puts t[0]
puts t[1]
```
もっとスマートな書き方ありそう・・・。
## STEP: 6 肯定先読み
```ruby
s = gets.chomp
puts s.index(/\d+(?=KB|MB|GB|TB)/)
puts s.match(/\d+(?=KB|MB|GB|TB)/)
```

## STEP: 7 否定先読み
```ruby
s = gets.chomp
puts s.index(/Java(?!Script)/)
puts s.match(/Java(?!Script)/)
```

## STEP: 8 肯定後読み
```ruby
s = gets.chomp
puts s.index(/(?<=Date: )(\d|\/)+/)
puts s.match(/(?<=Date: )(\d|\/)+/)
```

## FINAL問題 否定後読み
```ruby
s = gets.chomp
puts s.index(/(?<!\[Feature\] )[A-Z][^\[\]]*?\./)
puts s.match(/(?<!\[Feature\] )[A-Z][^\[\]]*?\./)
```