PHPのpreg_match_all関数についてです。


$pattern = "/<[^<]+>/";
$flag = preg_match_all($pattern,$str,$result);

こんな感じで<>の部分を抽出しようとしてますが、「っ」や「ー」や「(」などが入ると上手く拾いません。

これ↓
http://catfrog.net/PHP/affiliate_generater.php

原因は正規表現か、そもそもpreg_match_all関数がマルチバイトに対応してないせいだと考えています。

原因および対処方法(別の関数とか)ありましたらご教示いただきたく。

回答の条件
  • URL必須
  • 1人1回まで
  • 登録:
  • 終了:2006/05/21 19:23:33
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:abunakunai No.4

回答回数26ベストアンサー獲得回数3

ポイント30pt

pregを使いたかったらphpの内部コード、およびあつかう値をutf-8で

あつかうといかがでしょうか?

utf-8は上記のような問題はありません。

また、pregでも

preg_match('# #', $str, $match);

みたいな/を#や!に変換しても動くので試すのもいいでしょう

$strに

http://jp.php.net/preg_quote

をかます、という手もあります

id:catfrog

ありがとうございます。

2006/05/21 19:22:00

その他の回答3件)

id:vector_xenon No.1

回答回数113ベストアンサー獲得回数4

ポイント30pt

こちらを利用してみてはいかがでしょうか?

mb_ereg_match

http://php.s3.to/man/function.mb-ereg-match.html

id:catfrog

この関数だとなんか上手く行かないんですよね、、。

2006/05/21 19:21:02
id:SkullHeadArmor No.2

回答回数2ベストアンサー獲得回数0

ポイント1pt

http://q.hatena.ne.jp

(><)ぼくはまちちゃん!

id:catfrog

お逝きなさい!><

2006/05/21 19:21:14
id:pxb12663 No.3

回答回数395ベストアンサー獲得回数14

ポイント29pt

http://php.nohup.it/manual/ja/function.mb-ereg-match.php

日本語などの2バイト文字を扱う場合はmb関数を使った方がいいようです。

ただし、PHPのバージョンが低いとmb関数がサポートされてない場合がありますので、お気をつけ下さい。

PHP5なら使えます。

id:catfrog

マルチバイトはいっつも苦労します、、。

2006/05/21 19:22:18
id:abunakunai No.4

回答回数26ベストアンサー獲得回数3ここでベストアンサー

ポイント30pt

pregを使いたかったらphpの内部コード、およびあつかう値をutf-8で

あつかうといかがでしょうか?

utf-8は上記のような問題はありません。

また、pregでも

preg_match('# #', $str, $match);

みたいな/を#や!に変換しても動くので試すのもいいでしょう

$strに

http://jp.php.net/preg_quote

をかます、という手もあります

id:catfrog

ありがとうございます。

2006/05/21 19:22:00

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

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

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

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

回答リクエストを送信したユーザーはいません