一致していれば文字列を返し
"hoge fuga"['hoge'] #=> "hoge"
一致しなければ、nilを返します
"hoge fuga"['foo'] #=> nil
つかいどころと性能比較
require 'benchmark/ips' Benchmark.ips do |x| x.report("['substr']") { "hoge fuga"["fuga"]} x.report("[/substr/]") { "hoge fuga"[/fuga/]} x.report("include?") { "hoge fuga".include?("fuga")} x.compare! end
Calculating -------------------------------------
['substr'] 87.631k i/100ms
[/substr/] 78.634k i/100ms
include? 98.013k i/100ms
- -
['substr'] 2.477M (± 7.2%) i/s - 12.356M
[/substr/] 1.860M (± 5.6%) i/s - 9.279M
include? 2.905M (± 6.4%) i/s - 14.506MComparison:
include?: 2904552.8 i/s
['substr']: 2477433.8 i/s - 1.17x slower
[/substr/]: 1860109.6 i/s - 1.56x slower
正規表現は見るからに遅いですね……。
というわけで、これら機能は
- String#include? => とりあえず一致するかだけ知りたい
- String#[substr] => 一致した文字を使って継続した処理を行いたい
- String#[/regex/] => 他の正規表現と混ぜて使わなければならない
といった感じで使い分けるのが良いかと思われます。