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) と出てくるだけです。

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

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

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/08/02 15:34:34
  • 終了:2006/08/09 15:35:32

回答(3件)

id:technolize No.1

technolize回答回数21ベストアンサー獲得回数32006/08/02 15:52:58

ポイント27pt

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

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

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

id:ryuzi_kambe

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

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

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

2006/08/02 17:39:50
id:tllsotlp No.2

tllsotlp回答回数3ベストアンサー獲得回数02006/08/02 16:57:01

ポイント27pt

$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

id:ryuzi_kambe

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

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

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

2006/08/02 17:40:55
id:technolize No.3

technolize回答回数21ベストアンサー獲得回数32006/08/02 23:07:45

ポイント26pt

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

補足です。

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

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

id:ryuzi_kambe

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

2006/08/02 23:26:03

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません