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

PHPでも質問です。
検索用語にマッチしたモノを取り出すようにしたいのですが

if(preg_match("/$serch_keyword+/",$buff))

このようにしているのですが
検索するキーワードに「ー」という文字が入ると
エラーで出て機能しません。
エラーは
Warning: preg_match() [function.preg-match]: Compilation failed: missing terminating ] for character class at offset
と出てきて
preg_matchのある行数(上記のコード部分)を指定してきます。
原因がわからないのでアドバイスいただけないでしょうか?

●質問者: quocard
●カテゴリ:インターネット ウェブ制作
✍キーワード: Class AT Missing PHP Warning
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● きりしまかの
●35ポイント

preg_match 関数はperlのマッチエンジンをそのまま使っているので、perlに由来する問題がそのまま出てきてしまいます。

http://www.din.or.jp/~ohzaki/perl.htm#JP_Match

この文章にあるように、日本語マッチを真面目にpreg_matchでやろうとすると文字コードに対する本質的な勉強をしないといけず、かなり大変です。

もし単に、「$bufに$search_keywordが含まれていたらマッチ」という実装が必要なだけでしたら、以下のコードで事足ります。

if( strpos($buf,$search_keyword)!==false )

http://jp2.php.net/manual/ja/function.strpos.php

◎質問者からの返答

なるほど文字コードの関係ということですね。

さすがにそのあたりになると初心者の私には敷居が高いですね。

ですがいつかはやってみようと思います。

教えていただきましたコードがそのまま使用できました。

ありがとうございます。


2 ● b-wind
●35ポイント

mbstring の各種パラメーターはどうなっていますか?

http://manual.xwd.jp/ref.mbstring.html

特に mbstring.internal_encoding に注意しながら、

preg_match の代わりに mb_ereg_match 等のマルチバイト対応の関数を使うとうまく行くと思います。

preg 系関数と ereg 系関数は正規表現の扱いが少し違うのでその点には注意してください。

◎質問者からの返答

教えていただきました関数でうまくいきました。

まだまだ見てない関数がたくさんありますね。

バージョンによって使える使えないや、PHPの設定などによって変化するものもあるので

とても参考になります。

ありがとうございます。

関連質問


●質問をもっと探す●



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