[split,preg_split,explode]文字列を分割する(抽出)

公開日| 2015年4月19日   更新日| 2015年4月19日   コメントはありません。

今回は、phpでの文字列の分割(抜きだし)です。
まずは、Javaで書いてみましょうか。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.io.Console;

public class split {
	public static void main(String[] args) {
		//	分割する文字列
		String str = "Madrid,Paris,London";
		//	文字列を , で分割する
		String[] tokens = str.split(",");
		//	分割した結果をコンソールへ出力
		Console con = System.console();
		for (int i=0; i<tokens.length; i++) {
			con.printf("[%d]%s\n",i+1,tokens[i]);
		}
	}
}
C:\ > java split
[1]Madrid
[2]Paris
[3]London

と、こんな感じです。コンソールへ出力するのに手間取っていますが、やっているのは、splitメソッドで分割しているだけですね。
もちろん、分割する文字列も指定してますけど。

では、phpでは?

1
2
3
4
5
6
7
8
9
10
<?php
//	分割する文字列
$str = "Madrid,Paris,London";
//	文字列を , で分割する
$tokens = split(",",$str);
//	分割した結果をコンソールへ出力
for ($i=0; $i<count($tokens); $i++) {
	printf("[%d]%s\n",$i+1,$tokens[$i]);
}
?>
C:\>php split.php
[1]Madrid
[2]Paris
[3]London

とこんな感じです。同じようにsplitを使うだけです。簡単ですね。

これも含めて文字列を分割するための関数を簡単に解説しておきます。

この関数は PHP 5.3.0 で 非推奨となりました。この機能を使用しないことを強く推奨します。
※ここでは、わかりやすくsplitを使いましたが、今後は、preg_split を使いましょう。

使う関数は?

文字列の抽出に使う関数は、大きく2つあります。

  • array preg_split ( string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]] )
    : 指定した文字列を、正規表現で分割します。

    $str = 'one|two|three|four';
    
    // 正の値を持つ limit
    print_r(preg_split('/\|/', $str, 2));
    
    // 全て
    print_r(preg_split('/\|/', $str));
    
    // 全て(PREG_SPLIT_NO_EMPTY)
    print_r(preg_split('/\|/', $str ,-1,PREG_SPLIT_NO_EMPTY));
    
    // 全て(PREG_SPLIT_NO_EMPTY)
    print_r(preg_split('/\|/', $str ,-1,PREG_SPLIT_DELIM_CAPTURE));
    
    // 全て(PREG_SPLIT_NO_EMPTY)
    print_r(preg_split('/\|/', $str ,-1,PREG_SPLIT_OFFSET_CAPTURE));
    C:\>php preg_split.php
    Array
    (
        [0] => one
        [1] => two|three|four
    )
    Array
    (
        [0] => one
        [1] => two
        [2] => three
        [3] => four
    )
    Array
    (
        [0] => one
        [1] => two
        [2] => three
        [3] => four
    )
    Array
    (
        [0] => one
        [1] => two
        [2] => three
        [3] => four
    )
    Array
    (
        [0] => Array
            (
                [0] => one
                [1] => 0
            )
    
        [1] => Array
            (
                [0] => two
                [1] => 4
            )
    
        [2] => Array
            (
                [0] => three
                [1] => 8
            )
    
        [3] => Array
            (
                [0] => four
                [1] => 14
            )
    
    )
    $limitは、指定しない場合あるいは0以下の数値を指定した場合、すべてを分割します。
    正の値を指定した場合、その数分だけ分割して、残りは、そのまま出力します。

    $flagsは、

    PREG_SPLIT_NO_EMPTY
    このフラグを設定すると、空文字列でないものだけが preg_split() により返されます。

    PREG_SPLIT_DELIM_CAPTURE
    このフラグを設定すると、文字列分割用のパターン中の カッコによるサブパターンでキャプチャされた値も同時に返されます。

    PREG_SPLIT_OFFSET_CAPTURE
    このフラグを設定した場合、各マッチに対応する文字列のオフセットも返されます。 これにより、返り値は配列となり、配列の要素 0 はマッチした文字列、 要素 1 は subject におけるマッチした文字列のオフセット値となることに 注意してください。

  • array explode ( string $delimiter , string $string [, int $limit ] )
    : 文字列の配列を返します。この配列の各要素は、 string を文字列 delimiter で区切った部分文字列となります。

    $str = 'one|two|three|four';
    
    // 正の値を持つ limit
    print_r(explode('|', $str, 2));
    
    // 負の値を持つ limit (PHP 5.1 以降)
    print_r(explode('|', $str, -1));
    
    // 全て
    print_r(explode('|', $str));
    C:\>php split_test.php
    Array
    (
        [0] => one
        [1] => two|three|four
    )
    Array
    (
        [0] => one
        [1] => two
        [2] => three
    )
    Array
    (
        [0] => one
        [1] => two
        [2] => three
        [3] => four
    )
    $limitは、指定しない場合、すべてを分割します。
    正の値を指定した場合、その数分だけ分割して、残りは、そのまま出力します。
    負の値を指定した場合、全てのを分割した後、後ろから指定された数(絶対値)分だけ削除して出力します。

上記のような簡単な文字列で分割する場合など、 正規表現が必要ない場合は、絶対にexplodeを使った方が早いです。これホント。


コメント

口コミ・評判を投稿 :

ブラウザの JavaScriptが無効となっている場合、コメントの投稿はできません。
コメントを投稿するには、JavaScriptを有効にしてください

お名前 *

メールアドレス *
(口コミ・評判欄には、表示されませんが入力が必要です。)

サイトアドレス



  • ソーシャルブックマーク

  • はてなブックマークへ追加するはてな登録数
ページトップへ