PHPでも質問です。

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

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

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

回答の条件
  • 1人3回まで
  • 登録:2006/12/16 23:47:09
  • 終了:2006/12/17 01:01:11

回答(2件)

id:kkano No.1

きりしまかの回答回数7ベストアンサー獲得回数02006/12/17 00:02:20

ポイント35pt

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

id:quocard

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

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

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

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

ありがとうございます。

2006/12/17 00:59:46
id:b-wind No.2

b-wind回答回数3344ベストアンサー獲得回数4402006/12/17 00:45:23

ポイント35pt

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

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

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

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

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

id:quocard

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

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

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

とても参考になります。

ありがとうございます。

2006/12/17 01:00:56

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

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

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

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

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