人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPについて質問です。
文字列の中の[[と]]を削除するにはどうしたら良いのでしょうか?

例えば [[東京]] の 東京だけ抽出するということです。
よろしくお願いします。


●質問者: taroemon
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:PHP 抽出 文字列 東京
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● nagase
●35ポイント

正規表現で [[なんらかの文字列]] というパターンにマッチさせて、サブパターンで "なんらかの文字列" の部分を抜き出せば良いのです。

$str = '[[東京]][[大阪]][[名古屋]][札幌][[福岡]][[横浜]]';
$pattern = '\[\[(.*?)\]\]';
$i=preg_match_all('/'.$pattern.'/i',$str,$matches);
for ($j=0; $j<$i; $j++){
 print $matches[1][$j];
}

正規表現では[]文字クラス用のメタキャラクタなので\を付けてエスケープ、()で囲まれた部分がサブパターンとなります。

サブパターン中の.*?は改行文字を除く任意の1文字に0回以上マッチすると言う意味です。

preg_match_all は指定された文字列から全ての一致するパターンを抜き出して配列に格納します。

サブパターンが1ヶ所指定されているので、1回のパターンマッチで全体のパターンマッチ $maches[0] とサブパターン $maches[1] の二つの結果が獲られ、目的の文字列はサブパターンの方に格納されます。

◎質問者からの返答

ご回答ありがとうございます。

解説及びコメントが大変参考になりました。


2 ● rewish
●35ポイント

[[と]]が固定であれば、置換で簡単に実装できます。

<?php
// 対象文字列
$str = '[[東京]]';

// [[と]]の間の文字列だけ抜き取る
$str = preg_replace('/\[\[(.*)\]\]/', '$1', $str);

// 表示
echo $str; // 東京

複数行に対象文字列がある場合でも抽出可能です。

<?php
// 複数行の文字列
$str = <<< EOM
[[東京]]
[[大阪]]
[[北海道]]
EOM;

// [[と]]の間の文字列だけ抜き取る
$str = preg_replace('/\[\[(.*)\]\]/', '$1', $str);

// 表示
echo $str; // 東京 大阪 北海道

PHP: preg_replace - Manual

◎質問者からの返答

ご回答ありがとうございます。

うまくいきました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ