<< ウェブページのソースに色を付ける(prettyprint) | main | RSSリーダーを作る >>

2007.04.02 Monday

指定文字列に挟まれた文字列を返す

例えば、
1位 「黄砂」 2位 「ソロモン諸島」 3位 「ハンゲーム」 (2007年4月2日 10時 )

という文字列があったとします。
この文字列から、「」に挟まれた文字列を取得する方法を考えてみます。

単に、文字列Aと文字列Bの間に挟まれた文字列Cを取得したければ、
preg_match
を使うのが一番簡単ですが、初心者は正規表現の扱いに慣れていない方が多いでしょうから、strposとsubstrを組み合わせて作ってみます。
(正規表現を使った例もページの最後で紹介しておきます)

--
--
最初の分割ポイントとなる"「"については、explodeでセパレータとして指定すれば、そこから始まる文字列が配列に格納されます。
終了文字である"」"にういては、strposで探して、対象配列の最初から見つかった位置までを、substrで取得できます。

function between($beg, $end, $str) {
$ret_array = array();
$array = explode($beg,$str);
foreach($array as $item) {
$pos = strpos($item,$end);
if( false !== $pos ) {
$ret_array[] = substr($item,0,$pos);
}
}
return( $ret_array );
}


こんな感じで使います。
$arg = '1位 「黄砂」 2位 「ソロモン諸島」 3位 「ハンゲーム」 (2007年4月2日 10時 )';
$array = between("「","」",$arg);
foreach($array as $item) {
print($item."<br>");
}


この出力は、以下のようになります
黄砂
ソロモン諸島
ハンゲーム


HTMLから指定タグに挟まれた文字列を取得したい場合の基本形としてのサンプルです。

■正規表現による切り出し
最初にお話ししたとおり、正規表現を使って同じことが出来ます。

$src = '1位 「黄砂」 2位 「ソロモン諸島」 3位 「ハンゲーム」 (2007年4月2日 10時 )';
$pattern = '/「(.*?)」/';
$result = preg_match_all($pattern,$src,$dest,PREG_SET_ORDER);
if(false!==$result){
print 'マッチ数は、' . count($dest) . '<br>';
foreach($dest as $a){
print htmlspecialchars($a[0]) . '<br>';
}
}

これを実行すると、
マッチ数は、3
「黄砂」
「ソロモン諸島」
「ハンゲーム」

となり、上で紹介した例と同じ結果が得られます。
正規表現を使うと、こんなに簡単にできちゃいますので、勉強する価値はあります。
ポイントとしては、
マッチした文字列を繰り返し取得したい場合は、preg_match_allを使う、ということ。
preg_matchだと、一度パターンにマッチした時点で検索を終了してしまうので、希望の結果が得られません。
正規表現に関しては、奥が深くてとてもここでは語りつくせないので、省略します。
php.netへのリンク先には豊富なサンプルがたくさんあるので、片っ端から試してみて習得する、というのも一つの方法です。
習うより慣れろ、かな。

--

テクノラティお気に入りに追加する

Comments

コメント入力は停止しています

海外からと思われるコメントスパムが横行しているため、全記事のコメント入力を停止しています。メッセージのある方は、ホームページの一番下に連絡欄がありますので、そちらからお願いします。

Trackback URL

トラックバックする場合は、
トラックバック元の記事にこのエントリへのリンクを記載してください
このエントリのタイトル「指定文字列に挟まれた文字列を返す」
このエントリのリンク「http://kommy.s254.xrea.com/blog/log/eid28.html」