今回はRubyで文字列の検索する方法について解説します。
index
Rubyで文字列の有無を検索する方法として、indexメソッドを利用することが挙げられます。
indexメソッドは、文字列や配列の中に指定した文字列が含まれていた場合、その文字列の開始位置を整数の値で返します。
※開始位置は1番目であれば0を、2番目であれば1を返します。
含まれていない場合はnilが返ってきます。
基本的な書式は以下のようになります。
1 |
str.index(substr ,[offset]) #(検索したい文字列, [検索を開始する位置]) |
[offset]の部分に引数を指定すると、検索を開始する位置を決めることができます。
では実際に使ってみましょう。
1 2 3 4 |
str = "milkman is coming back!! milkman is not superman." puts str.index("man") puts str.index("com",13) |
実行結果は以下のようになります。
1 2 |
4 nil |
4とnilが返ってきていますね。
初めの「puts str.index("man")」では検索の開始位置を指定していないので、はじめの位置から「man」の検索がかかりました。
「man」が開始する位置は5番目にあたるので、4が返ってきています。
次の「puts str.index("com",13)」では検索の開始位置に14番目からという指定をかけました。
14番目以降には「com」という文字列は存在しないので、nilが返ってきます。
rindex
rindexメソッドでは、文字列の末尾から検索をかけます。
末尾からの検索で、開始位置を指定したい場合、-1であれば末尾から1番目、-2であれば末尾から2番目といった具合に、マイナスをつけることで開始位置を帰ることができます。
※戻り値は文字列の先頭からの位置になります。
indexメソッドとrindexメソッドを比較してみましょう。
1 2 3 4 |
str = "milkman is coming back!! milkman is not superman." puts str.index("man") puts str.rindex("man") |
実行結果は以下のようになります。
1 2 |
4 45 |
rindexメソッドを使用した場合、末尾からの検索になるので、「superman」の「man」が対象になります。
返ってくる値は文字列の先頭から数えた位置なので気をつけましょう。