部分文字列・文字列検索

Java

  • 部分文字列は String#substring(int, int)。
    • index, index である。第二引数は文字列長の指定ではない。
String s = "ABCDEFG";
int i = ... //取り出し開始位置。0基準。
int j = ... //取り出し終了位置。同上。指定位置の文字は含まれない。
//i == 0 の場合は、取り出された結果の文字列の長さは j になる。 
String sub = s.substr(i, j); 
  • 一致判定は String#startsWith(String), String#endsWith(String)
  • 検索は String#indexOf(String)。返り値は0基準。

PHP

Java の substr, startsWith, endswith, indexOf に相当するもの。
index,index か index, length かも明記。基準が0か1かも明記。
もし少し探して見つからなければ正規表現で解決するのでしょうね。

  • mb_substr(文字列,index,length)とすると文字数が取れます。
    • substr(文字列,index,length)とするとバイト数からとり、たとえば1(1バイト)と1(2バイト)で結果が変わります。
$str2 = 'こんにちは';
$substr3 = substr($str2, 2, 2);
$substr4 = mb_substr($str2, 2, 2);
print($str2.' の2バイトから2バイト取り出すと '.$substr3.' です<br>'); //ん(String)
print($str2.' の2文字目から2文字取り出すと '.$substr4.' です<br>');   //にち
//失敗した場合や文字列が空の場合はFALSEが返されます。
  • 文字列の一致がとりたいときにはいくつかの方法があります。

1.strstr(文字列,一致されたい文字列)では文字列の最初に出てくる「一致されたい文字列」を探します。
$email  = '[email protected]';
$domain = strstr($email, '@');
echo $domain; // @example.com と表示します
//失敗するとFALSE
 しかしStringで見つかった所から最後までの長さの文字列を返そうとするので注意が必要です。
参照:The saibase-文字列の一致

2.strpos(文字列,一致されたい文字列)はstrstrの機能に加え、指定された文字列やfalseを返すことが出来ます。
$mystring = 'abc';
$findme   = 'a';
$pos = strpos($mystring, $findme); //この関数でも失敗するとFALSEを返します。
//ここの判定式で==を使ってしまうとFALSE == 0と見なされ、indexの0と誤認されてしまいます。
if ($pos === false) {
    echo "文字列 '$findme' は、文字列 '$mystring' の中で見つかりませんでした";
} else {
    echo "文字列 '$findme' が文字列 '$mystring' の中で見つかりました";
    echo " 見つかった位置は $pos です";
}

javascript

  • String#substr(index,length);
//JavaやPHPと同じようにsubstr(index,length);メソッドが使えます。
var alpha = "abcdefg".substr(2,4); //"cdef"が入ります。
//指定lengthが存在しなかったり、それが全長よりも大きい場合にはindexからの全長を返します。
//まずindexから存在しなかったときは-1を返します。
document.write(alpha); //cdef
  • String#indexOf(String);
//String#indexOf(string);メソッドでは、出現する位置をintで返すことが可能です。
var beta = "hijklmn".indexOf("k");
//見つからない場合は-1を返します。
document.write(beta); //3
参照:ぶれすとつーる-単語前方一致・後方一致
前方一致、後方一致もPHPと同様に取れます。

Java の substr, startsWith, endswith. indexOf に相当するもの。
index,index か index, length かも明記。基準が0か1かも明記。
もし少し探して見つからなければ正規表現で解決するのでしょうね。

SQL

  • 独自の簡単なワイルドカードを使って判定を行います。
    • %   任意の0文字以上の文字列
    • _   任意の1文字

サンプル
//prefectureデータベースを使用。
+------+--------+------------+
| code   | name     | population     |
+------+--------+------------+
| 01      | 北海道   |    5570000    |
| 02      | 青森県   |    1407000    |
| 03      | 岩手県   |    1364000    |
+------+--------+------------+
mysql>select * from prefecture where name like '__県';
//実行結果
+------+--------+------------+
| code   | name     | population     |
+------+--------+------------+
| 02      | 青森県   |    1407000    |
| 03      | 岩手県   |    1364000    |
+------+--------+------------+
※likeを使用する場合、where内には関数のみを記述して下さい。
× select * from prefecture where code <= 03 like name = '__県';
○ select * from prefecture where name like '__県';
×のまま実行するとどちらの条件式も反映されません。
参照:DBOnline-パターンマッチングで比較

Excel数式

LEFT関数に代表される関数が使用できます。
  • =LEFT(文字列,[文字数])        :文字列の左端から指定した文字数だけ取り出す。
  • =RIGHT(文字列,[文字数])      :文字列の右端から指定した文字数だけ取り出す。
  • =MID (文字列,開始位置,文字数)    :文字列の指定した位置から指定した文字数だけ取り出す。
参照:Excel基本講座
検索は検索機能を使って行うほか、マクロを組むことでも実行可能なようです…
参照:Excel VBA 入門講座

タグ:

+ タグ編集
  • タグ:
最終更新:2013年12月13日 16:07