部分文字列を検索するには (indexOf, lastIndexOf) 2015/02/16
文字列の中から特定の部分文字列を検索する方法。
Go言語 (golang) 2015/02/16
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 2015/04/21
String
クラスのindexOf
メソッドまたはlastIndexOf
メソッドを使う。
indexOf
メソッドは前から検索し、lastIndexOf
メソッドは後ろから検索する。
いずれも見つからない場合は -1
を返す。
Signature:
int java.lang.String#indexOf(int ch)
int java.lang.String#indexOf(int ch, int fromIndex)
int java.lang.String#indexOf(String str)
int java.lang.String#indexOf(String str, int fromIndex)
int java.lang.String#lastIndexOf(int ch)
int java.lang.String#lastIndexOf(int ch, int fromIndex)
int java.lang.String#lastIndexOf(String str)
int java.lang.String#lastIndexOf(String str, int fromIndex)
lastIndexOf
で fromIndex
を指定すると、そのインデックスより前を走査する。
Groovyでの例
def p = "abcabc".indexOf("bc") // => 1
PHP 2015/10/16
strpos
関数を使う。
strpos($mystring, $str)
例:
strpos('abcabc', 'bc') // => 1
見つかった場所をインデックスで返す。文字列の先頭で見つかった場合は 0
を返す。見つからない場合は FALSE
を返す。
0
も FALSE
の扱いになるため、以下のようにすると、見つかった場合という条件ではなく、先頭以外で見つかった場合という条件になってしまうので注意。
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 2013/10/21
str = "abcabc"
print str.find("bc")
# => 1
print str.find("bc", 1)
# => 1
print str.find("bc", 2)
# => 4
Ruby 2014/11/03
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 2013/10/17
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 2013/09/07
string.indexOf(str)
string.lastIndexOf(str)
見つからなかった場合は -1
を返す。