|
正規表現
Ruby では、正規表現 (regular expression) は Regexp というオブジェクトである。
- 基本
- 文字列「line」に「abc」という文字が含まれているか否かを調べ、真偽の値を返す
- 2つの文字列
- 文字列「line」に「abc」、「ef」のどちらかの文字列が含まれているか否かを調べる
- 大文字小文字の区別
- 正規表現の後ろに「i」と書くと、大文字小文字を無視する
正規表現のメタ文字
記号 | 意味 | | 例 | 意味 |
---|
. | 任意の1文字 | | a.*c | aで始まりcで終わる文字列 | * | 直前の表現の0回以上の繰り返し | | ab*c | ac, abc, abbc, abbbc,... | + | 直前の表現の1回以上の繰り返し | | ab+c | abc, abbc, abbbc, ... | ? | 直前の表現の0回か、1回の繰り返し | | ab?cde?f | acdf, abcdf, acdef, abcdef |
文字クラスの使用
- 角括弧[]は、その中に入っているどれか1文字を表す。
これを文字クラスと言う。
- 例
a[bc]d は abd 又は acd を意味する
- この括弧の中でマイナス記号は文字の範囲を表す。また、[の直後の^(ハット)記号は、
補文字クラス(以下に続く文字以外の文字)を表す。
- 例
[a-z] 全ての小文字アルファベットを表す
[ac-e] a, c, d, e
[^ac-e] a, c, d, e 以外の1文字
- 角括弧[]の外の^(ハット)記号は、文字列の先頭位置を表す。
- 例
/^a/ は a で始まる文字列にマッチ
/^a/ =~ "abc" => 真
/b/ =~ "abc" => 真
/^b/ =~ "abc" => 偽
- 例
/b$/ =~ "abc" => 偽
/c$/ =~ "abc" => 真
/c$/ =~ "abc\n" => 真
/c\n$/ =~ "abc\n" => 偽
/c$\n/ =~ "abc\n" => 真
バックスラッシュ記法
バックスラッシュは、以下に続く1文字と一緒になって特別な意味を持つ。
\nや\rなどは文字列内で使われた場合と同じ意味を持つが、
それ以外にも以下の記法がある。
記号 | 意味 |
---|
\\, \., \*, \+, \? | \, ., *, +, ?の文字そのもの | \d | 数字のクラス | \w | 英数字とアンダースコアのクラス | \s | 空白文字(スペース, タブ, 改行)のクラス | \D, \W, \S | それぞれの小文字版の補文字クラス |
例えば、\dは[0-9]と、\Dは[^0-9]と同じ意味を持つ。
変数に保存
正規表現の括弧にマッチした部分の文字列は、特殊変数 $1, $2... に保存される。
- 例
/(.*):(\d+)/ =~ "hoge:8080"
$1 に hoge が代入される
$2 に 8080 が代入される
置換
- 文字列オブジェクトのメソッドであるgsubを使用すれば、
正規表現にマッチする全ての文字を置換する事ができる
- マッチした全ての部分を置換するのではなく、最初にマッチした部分だけを置換したい場合は
subを使用する
- !付きのメソッドは、そのレシーバ自体を加工する
0
1
2
3
| | str = "sanachan"
str.gsub(/a/, "A") str.sub(/a/, "A") str.sub!(/a/, "A")
|
|
|