文字列の中の[[と]]を削除するにはどうしたら良いのでしょうか?
例えば [[東京]] の 東京だけ抽出するということです。
よろしくお願いします。
正規表現で [[なんらかの文字列]] というパターンにマッチさせて、サブパターンで "なんらかの文字列" の部分を抜き出せば良いのです。
$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] の二つの結果が獲られ、目的の文字列はサブパターンの方に格納されます。
[[と]]が固定であれば、置換で簡単に実装できます。
<?php // 対象文字列 $str = '[[東京]]'; // [[と]]の間の文字列だけ抜き取る $str = preg_replace('/\[\[(.*)\]\]/', '$1', $str); // 表示 echo $str; // 東京
複数行に対象文字列がある場合でも抽出可能です。
<?php // 複数行の文字列 $str = <<< EOM [[東京]] [[大阪]] [[北海道]] EOM; // [[と]]の間の文字列だけ抜き取る $str = preg_replace('/\[\[(.*)\]\]/', '$1', $str); // 表示 echo $str; // 東京 大阪 北海道
ご回答ありがとうございます。
うまくいきました。
ご回答ありがとうございます。
解説及びコメントが大変参考になりました。