Rubyシルバーに出てくる正規表現

Rubyシルバーによく出てくる正規表現について自分のためにメモします。

参考にしたのは、この本です。この参考書の練習問題、模擬試験で出て来た正規表現を中心に書いていきます。

[改訂2版]Ruby技術者認定試験合格教本(Silver/Gold対応)Ruby公式資格教科書

以外にも正規表現の問題数は4問だけ。しかし、必ず出題されるので抑えておきたいところです。

以下は実際に[改訂2版]Ruby技術者認定試験合格教本(Silver/Gold対応)Ruby公式資格教科書に載っている問題です。





主な正規表現のメタ文字

メタ文字 メタ文字の意味
[] いずれか1文字を表す文字クラスをつくる
[^] 〜以外の任意の1文字を表す文字クラスをつくる
- []で使われると文字の範囲を表す
. 任意の1文字を表す
() 内部でマッチした文字列をキャプチャもしくはグループ化する
? 直前の文字やパターンが1回、もくは0回現れる
* 直前の文字やパターンが0回以上連続する
+ 直前の文字やパターンが1回以上連続する
{n,m} 直前の文字やパターンがn回以上、m回以下連続する
| or条件をつくる
^ 行頭を表す
$ 行末を表す
\ メタ文字をエスケープしたり、\nや\wといった他のメタ文字の一部になったりする





第1問 Newまたはnewのみで構成される行にマッチする正規表現を選びなさい(2つ)

選択肢)
- ^[Nn]ew$
- ^N|new$
- ^[Nn][e][w]$
- ^New|new$
- ^[New][new]$
答え)
- ^[Nn]ew$
- ^[Nn][e][w]$
解説)
- ^N|new$はNにもマッチします。
- ^New|new$はNewnewにもマッチします。
- ^[New][new]$はNnやeeなどにもマッチします。





第2問 一つ以上の数字のみで構成される行にマッチする正規表現を選びなさい。

選択肢)
- /^[0-9].$/
- /^[0-9]*$/
- /^[0-9][0-9]*$/
- /^[0-9][0-9].*$/
答え)
/^[0-9][0-9]*$/
解説)
- /^[0-9].$/は数字、任意の文字なので`0あ`でもマッチします。
- /^[0-9]*$/は数字の0文字以上の繰り返しなので、空行にもマッチします。
- /^[0-9][0-9].*$/は数字、数字、任意の文字なので`00あ`でもマッチします。





第3問 以下のコードを実行すると何が表現されますか?

p  "abc def 123 ghi 456".scan(/\d+/).length
答え)
2
解説)
文字列で数字のみの繰り返しパターンは`123`と`456`の2個です。





第4問 以下のコードを実行すると何が表現されますか?

p "HogeHOGEhoge"[/[A-Z][^A-Z]+/]
答え)
"Hoge"
解説)
最初が大文字、あとが大文字以外のモノにマッチします。





参考

See Also