- ベストアンサー
mb_ereg_matchのつかいかたについて
PHP Version 4.3.11 windows2000 を使っています。 mb_ereg_matchのつかいかたなのですが、 $s1="100"; $pattarn="/100/"; var_dump (mb_ereg_match("/$pattarn/", $s1)); とすると bool(false) となります。実際値に入るのは日本語なのですが、数字ですらできないので何か間違っているならば教えてください。お願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
mb_ereg を使うと.* を付けなくてもいいですよ。 >$test=".*$month[i].*"; i → $i >while (!feof($fp)) { ってしたら、 $month[$i] が変化する前にファイルを読み終わってしまうと思いますけど
その他の回答 (3)
- ttyp03
- ベストアンサー率28% (277/960)
#2です。 考えられそうなことは、$formが空、CSVファイルの中身がカンマ区切りになっていない且つ検索パターンが必ず含まれる、くらいでしょうか。 とりあえず$formの確認をしてみてください。
お礼
ありがとうございました。 >$formが空 >CSVファイルの中身がカンマ区切りになっていない且つ検索パターンが必ず含まれる という理由ではないようなので forでループさせないで $test=".*$month[0].*|.*$month[1].*|.*$month[2].*|.*$month[3].*"; として、検索パターンの数を決めることにしました。 するとうまくいきましたのでこちらでやっていきます。
- ttyp03
- ベストアンサー率28% (277/960)
こんなパターンにすればマッチはしましたよ。 .*100.*
お礼
書き損じがありました。 $test=".*$month[i].*"; の部分ですが $test=".*$month[$i].*"; でした。 すみません。これでお願いします。
補足
すみません。 もう少し補足させて下さい。 $month = split(" ",$form);←$formはフォームから入力された値です。 $count = count($month); for ($i=0;$i< $count;$i++){ $test=".*$month[i].*"; while (!feof($fp)) { list($s1,$s2,$s3,$s4) = fgetcsv($fp,1024); if(mb_ereg_match("$test", $s1)){ print "<tr><td>$s1</td>"; print "<td>$s2</td>"; print "<td>$s3</td>"; print "<td>$s4</td></tr>"; } } } スペース区切りで入力された値をその数だけ検索かけたいのですが教えていただいた方法だとcsvの中身が全部マッチしてしまうのです。 なぜだかわからないのですが。 よろしくお願いします。
- MrYoYoYo
- ベストアンサー率33% (38/115)
ただたんにマッチさせるだけならば、 / はいらないと思います。
補足
すみません。/はずすとできました。 実際にやりたいのは、 $pattarn="100"; の100の部分を $pattarn="/$test[i]/"; ループさせて正規表現をつかいたいのです。 $s1の中のどこかに$test[i]が入っていればマッチ というものです。 フォームから入力された値をtxtから検索して あればその文字列を出力というものを作っています。 /をはずして行ってみると 100だけのものはマッチするのですが お茶 100 という文字列にはマッチしないのですが何かやり方はありますか?
お礼
どうもありがとうございます。 yahoo等の検索サイトのようにスペース区切りをいくつしても検索かけられるようなものを作りたく、いろいろ考えてみたのですが・・・ >$month[$i] が変化する前にファイルを読み終わってしまうと思いますけど そのとおりです。。。 別の対策を考えてみます。(T_T)