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

PHP の ereg_replace(または preg_replace)で、一部マッチした部分のみを取り出したいと考えています。

[CDATA[ケーキ]]

と出力されている部分のうち「ケーキ」という部分だけ取り出そうと考えています。

こちら
http://phpspot.net/php/pg%90%B3%8BK%95%5C%8C%BB%82%C5%95%B6%8E%9A%97%F1%92u%8A%B7.html

を参考に、

$_string = "[CDATA[ケーキ]]";
$string = ereg_replace("\[CDATA\[(.+?)\]\]","\\1",$_string);
echo $string;

というサンプルコードを書いてみたのですが、$string の中身は var_dump($string) しても bool(false) と出てくるだけです。

うまくこの一致部分を取り出すには、何処を直したらいいでしょうか。

ちょっとレベルの低い質問で恐縮ですが、よろしくお願いします。

●質問者: ryuzi_kambe
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:CDATA echo PHP String ケーキ
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● technolize
●27ポイント

http://php.morva.net/manual/ja/function.mb-ereg-replace.php

日本語を扱うのでしたら mb_ereg_replace ではないでしょうか。

mb_internal_encoding や mb_regex_encoding での文字コード指定も合わせてどうぞ。

◎質問者からの返答

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

ひとまず結果が帰ってこないという状態からは脱することが出来ました。

しかし、文字によってはマッチしないケースがあり、文字コードの設定もいろいろ揃えて見ましたがうまくいかないようでした。


2 ● tllsotlp
●27ポイント

$str = "[CDATA[クッキー]]";

$string1 = preg_replace("/\[CDATA\[(.+?)\]\]/","\\1",$str);//preg_replaceを使う場合

$string2 = mb_ereg_replace("\[CDATA\[(.+?)\]\]","\\1",$str);//mb_ereg_replaceを使う場合

echo $string1."=".$string2;

technolize さんのおっしゃる通り、マルチバイトを扱う場合はmb_ereg_replaceを使用するとうまくいきます。

またpreg_replaceは確かUTF-8でのエンコーディングならマルチバイト対応していたと思います。


http://ir.php.net/manual/ja/function.preg-replace.php

◎質問者からの返答

ありがとうございます。マルチバイトのところはすっかり頭から抜けていたようで恥ずかしいです。

preg_replace でやりなおしたところ、無事うまくマッチし、取り出すことが出来ました。ケースバイケースで両者を使い分けていきたいと思います。

改めてお礼申し上げます。


3 ● technolize
●26ポイント

http://www.google.co.jp/search?q=mb_ereg+UTF-8&start=0&hl=ja...

補足です。

PHP のバージョンによっては文字コードとの兼ね合いでうまく動作しないこともあるようです。

仰るとおり、使い分けるのが賢明ですね。

◎質問者からの返答

ありがとうございます。こういう検索クエリは思いつきませんでした。勉強になります。

関連質問


●質問をもっと探す●



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