部分文字列を検索するには (indexOf, lastIndexOf)

文字列の中から特定の部分文字列を検索する方法。

Go言語 (golang)

stringsパッケージのIndex関数またはLastIndex関数を使う。 Index関数は前から検索し、LastIndex関数は後ろから検索する。

いずれも見つからない場合は -1 を返す。

package main

import "fmt"
import "strings"

func main() {
    str := "abcabc!"
    fmt.Printf("%d\n", strings.Index(str, "bc"))
    // => 1
    fmt.Printf("%d\n", strings.LastIndex(str, "bc"))
    // => 4
}

Java / Scala / Groovy

StringクラスのindexOfメソッドまたはlastIndexOfメソッドを使う。 indexOfメソッドは前から検索し、lastIndexOfメソッドは後ろから検索する。

いずれも見つからない場合は -1 を返す。

Signature:

lastIndexOffromIndex を指定すると、そのインデックスより前を走査する。

Groovyでの例

def p = "abcabc".indexOf("bc") // => 1

PHP

strpos関数を使う。

strpos($mystring, $str)

例:

strpos('abcabc', 'bc') // => 1

見つかった場所をインデックスで返す。文字列の先頭で見つかった場合は 0 を返す。見つからない場合は FALSE を返す。

0FALSE の扱いになるため、以下のようにすると、見つかった場合という条件ではなく、先頭以外で見つかった場合という条件になってしまうので注意。

if (strpos($str, $findme))

以下のようにすれば、見つかった場合という条件になる。

if (strpos($str, $findme) !== FALSE)

PHPでは文字列と数値がしばしば勝手に変換されるので型の意識が薄れがちだが、 2つ目の引数がたまたま数値になってしまっていたりすると意図したとおりには動かない。

var_export(strpos("123", "2"));  // => 1
var_export(strpos("123", 2));    // => false
var_export(strpos(123, "2"));    // => 1
var_export(strpos(123, 2));      // => false

strpos 関数 | PHP Manual
http://php.net/manual/ja/function.strpos.php

Python

str = "abcabc"

print str.find("bc")
# => 1

print str.find("bc", 1)
# => 1

print str.find("bc", 2)
# => 4

Ruby

String#index(str)
String#index(str, index)

String#rindex(str)
String#rindex(str, index)

見つからない場合は nil を返す。2つ目の引数を与えると index はその位置以降を探し、 rindex はその位置以前を探す。

'abcabc'.index('abc')     # => 0
'abcabc'.index('abc', 1)  # => 3
'abcabc'.index('abc', 3)  # => 3
'abcabc'.index('abc', 4)  # => nil
'abcabc'.rindex('abc')    # => 3
'abcabc'.rindex('abc', 3) # => 3
'abcabc'.rindex('abc', 2) # => 0

Unicodeの拡張領域にも対応している。

"\u{5730 7403 1F30E 1F30D}".index("\u{1F30D}")  # => 3

String#index | Ruby 2.1 リファレンスマニュアル
http://docs.ruby-lang.org/ja/2.1.0/class/String.html#I_INDEX

String#rindex | Ruby 2.1 リファレンスマニュアル
http://docs.ruby-lang.org/ja/2.1.0/class/String.html#I_RINDEX

Perl

my $str = "abcabc";
print index($str, 'abc') . "\n";    # => 0
print index($str, 'abc', 1) . "\n"; # => 3
print index($str, 'abc', 3) . "\n"; # => 3
print index($str, 'abc', 4) . "\n"; # => -1

index 関数 | perldoc.jp
http://perldoc.jp/func/index

JavaScript / CoffeeScript

string.indexOf(str)

string.lastIndexOf(str)

見つからなかった場合は -1 を返す。

このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。