文字列が特定の文字や文字列で始まっているかどうかを判定するには (start_with? / startsWith)

Java

if (str.startsWith(prefix)) {
    System.out.println("Match!");
} else {
    System.out.println("Unmatch!");
}

Scala

if (str.startsWith(prefix)) {
  println("Match!");
} else {
  println("Unmatch!");
}

PHP

if (substr($str,  0, strlen($prefix)) === $prefix) {
    // Match
}

Python

if str.startswith(prefix):
    print("Match!")
else:
    print("Unmatch!")

Ruby

if str.start_with?(prefix)
  puts "Match!"
else
  puts "Unmatch!"
end

Perl

if ($str =~ ('\A' . quotemeta($prefix))) {
    print "Match!";
} else {
    print "Unmatch!";
}

関連

Java / Scala

Signature:

boolean java.lang.String#startsWith(String prefix)
boolean java.lang.String#startsWith(String prefix, int offset)

java.lang.String#startsWith | Java Platform SE 8 Javadoc
http://docs.oracle.com/javase/8/docs/api/java/lang/String.html#startsWith-java.lang.String-
http://docs.oracle.com/javase/8/docs/api/java/lang/String.html#startsWith-java.lang.String-int-

PHP

これを簡単にやる関数はないようなので、例えば以下のようにする。

if (substr($str,  0, strlen($prefix)) === $prefix) {
    // Match
}

または以下のような関数を作る。

function startsWith($str, $prefix) {
    return substr($str,  0, strlen($prefix)) === $prefix;
}

strpos($str, $prefix) === 0 だと $str が長い文字列の場合に、走査処理が無駄になってしまう。

Python

文字列にある startswithメソッドを使う。

str = "abcabc"

print str.startswith("ab")
# => True

print str.startswith("bc")
# => False

string.startswith | Python 2.7 documentation
http://docs.python.jp/2/library/stdtypes.html#str.startswith

string.startswith | Python 3 documentation
http://docs.python.jp/3/library/stdtypes.html#str.startswith

Ruby / JRuby

文字列にある start_with? メソッドを使う。

str.start_with?(prefix)

Perl

文字列の先頭にマッチする正規表現の \A を使う。

print "abc" =~ /\Aab/; # => 1

prefixが変数の場合は以下のようにするとできる。

if ($str =~ ('\A' . quotemeta($prefix))) {
    print "match\n";
} else {
    print "unmatch\n";
}

上記例のように正規表現全体を () で囲む必要があり、囲まないと =~ のほうが先に結合してしまって、常にmatchしてしまう。

JavaScript

よく使う方法。

str.indexOf(prefix) == 0

ただ、これだと、strが長い文字列の時にいちいちstrの最後までなめるのが効率よくなさそう。

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