天使と悪魔選手権

例えば
$mojiretu = 'a/bb/cccc/d/e';
という文字列があったときに、'/'で区切って指定した位置で文字を分けたい場合に
$wk = 'a/bb';
なら
$arr = split('/', $wk);//$arr[0]・・・'aa' $arr[1]・・・'bb'
で簡単に分けられますが、上の$mojiretuのような区切る文字('/')が
たくさんあった場合に、前から3つ目の'/'で$mojiretuの中の文字列を2つに分けたい
というような処理がしたいのですが、どのようなやり方があるのでしょうか?

[希望する結果]
$mojiretu = 'a/bb/cccc/d/e';
前から3つ目の'/'で分ける
$arr[0]・・・'a/bb/cccc'
$arr[1]・・・'d/e'

A 回答 (1件)

正規表現の使える preg_split を利用してみてはいかがでしょうか



<?php
$mojiretu = 'a/bb/cccc/d/e';
$arr = preg_split("#^([^/]*/[^/]*/[^/]*)/#",$mojiretu,-1,PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
print_r ($arr) ;// Array ( [0] => a/bb/cccc [1] => d/e )
?>

^([^/]*/[^/]*/[^/]*)/ 部分の正規表現パターンで区切ります
'a/bb/cccc/d/e' で上記に当てはまるのは、わかりやすく括弧もつけると
'(a/bb/cccc)/' の部分です
前から3つ目の'/'を表すために、前から3つ目の'/'までの全てを
区切りとして指定することになります

ただこれだけで区切り終えてしまうと ''(空文字) と 'd/e' になってしまいます
そこで、PREG_SPLIT_DELIM_CAPTURE フラグを付けて、
正規表現で括弧内部分にマッチした内容も返すようにしています
そうすると、''(空文字) と 'a/bb/cccc' と 'd/e' に分けられます

空文字が邪魔なので、PREG_SPLIT_NO_EMPTY フラグを使い
空文字は返さないようにして前途記述のできあがりです

詳しくは下記を参照してください
- preg_split
http://au.php.net/manual/ja/function.preg-split. …
- パターン構文
http://au.php.net/manual/ja/reference.pcre.patte …
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。
そのやり方でできました。ありがとうございます。

お礼日時:2007/12/15 16:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報