PHP検索 完全一致のみヒット

このQ&Aのポイント
  • サイト内検索でcsvファイルから文字列を呼び出し一致した文字列を出力するスクリプトの中で、完全に一致した文字列だけを出力する方法を教えてください。
  • 現在、「A」で検索すると「A」から始まる全ての文字列が出力されてしまっています。本来は完全に一致した文字列だけを出力したいです。
  • 質問内容におかしな点があるかもしれませんが、よろしくお願いします。
回答を見る
  • ベストアンサー

PHP検索 完全一致のみヒット

詳しくないので質問内容におかしな点が多々あるかと思いますが・・ サイト内検索でcsvファイルから文字列を呼び出し一致した文字列を出力するというスクリプトで 完全に一致した文字列だけ出力させたいのですが、 たとえばcsvに「AAA」「ABC」「ARZ」のデータがあり 「A」で検索しても何も出力されず、「AAA」と検索した時だけ「AAA」だけを出力したいのですが 「A」で検索すると「A」から始まる全ての文字列(↑で挙げた文字列全て)が出力されてしまって困っています。 どの部分を変えると完全に一致した文字列だけを検索できるようになるのか指摘してくださればと思います。 <?php function funcSiteLink($str, $pass, $csvFileName){ if($str){ $keyword = mb_convert_kana($str, "s","SJIS"); $arr_keyword = preg_split('/[\s]+/', $keyword, -1, PREG_SPLIT_NO_EMPTY); $file = fopen($csvFileName,"r"); $i = 0; while(!feof($file)){ $csv = fgets($file); $str = explode(",", $csv); $keywordPassArr[$i] = $str; $i++; } $judg = 0; foreach($arr_keyword as $val){ foreach($keywordPassArr as $kpa){ preg_match("/$val/", $kpa[0], $matches, PREG_OFFSET_CAPTURE); if($matches[0][1] === 0){ echo '<p><a href="'.$pass .$kpa[1] .'">' .$kpa[0] .'</a></p>'; $judg++; } } } if($judg === 0){ echo "<p>一致しません</p>"; } fclose($file); }else{ echo "<p>一致しません</p>"; } } ?>

  • PHP
  • 回答数2
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.2

PHPは専門外なので、見当違いな回答ならスルーしてくださいな。 preg_match("/$val/", $kpa[0], $matches, PREG_OFFSET_CAPTURE);  ↓ preg_match("/^$val\$/", $kpa[0], $matches, PREG_OFFSET_CAPTURE); としてみたらどうでしょうか?

asdf20xx
質問者

お礼

おかげさまで出来ました。 ありがとうございます。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>「A」で検索しても何も出力されず、「AAA」と検索した時だけ「AAA」だけを出力したい 命題が矛盾していませんか? 「A」が「AAA」に含まれないという箇所をどう判断するロジックなのか示すべきです

関連するQ&A

  • キーワード \P が部分一致で検索できない。

    キーワード \P が部分一致で検索できない。 mysqlをutf8_unicode_ciで使っています。 検索キーワードに\Pと入力し、部分一致で検索すると、OMP,EEP等\Pと部分一致していない データも検索結果に表示されてこまっています。 \(バックスラッシュ)は特別な文字なので、\Pと入力しても、\(バックスラッシュ)は無視され、キーワード 「P」で検索されているようです。 今しようとしていることは、 検索キーワードを暗号化し、暗号化したキーワードで検索する処理です。 暗号化したキーワードはかなりの確立で\(バックスラッシュ)が含まれるので、 \(バックスラッシュ)を普通の文字列として検索したいです。 具体的には select * from testtbl where test like '%\\P%' このようなSQL分を実行した時、OMPやEEPが合致しないようにしたいのです。 よくわからなくなってきたので、アドバイス宜しくお願いします。

    • ベストアンサー
    • MySQL
  • PHPで部分一致検索をしたい

    PHPの勉強をしています。 簡単なPHPを作成し、MySQLからデータを持ってきたいのですが、 上手くいきません。 完全一致で入力すれば、該当するものがヒットしますが、部分一致となると何も表示されなくなってしまいます。 検索文字列 = 山田太郎   →検索OK 検索文字列 = 山田 →検索NG となります。 山田と入力すれば、該当するデータを全て表示するにはどうすればいいのでしょうか。 宜しくお願いします。 //名前 if(!empty($name)) { $name = addslashes($name); $where = "name = '$name' && "; } else if(preg_match("/^(?!ab$)[a-z0-9]+$/", $name)) { $name = addslashes($name); $where = "name = '$name' && "; }

    • 締切済み
    • PHP
  • 繰り返し文字検索

    strchrを何回か使用して、文字列中の文字を検索したいです。 以下が実行画面 文字列を入力してください。TESTTEEEEEEEEEEEEEEST} 文字を入力してください。T 0 2 0 15 -2686605 以下が実行した関数です。 void sea(const char*str2,int*c){ char *p; while(*p!='\0'){ p=strchr(str2,*c); printf("%d\n",p-str2); str2=p+1; } } char* str2とint *cには、キーボードからそれぞれ、文字列と文字を入力しました。 検索文字の一致した位置の、一つ後ろを指定したいのです。御指摘お願いします。

  • 特定文字列を検索してそれ以外を出力する

    お世話になります。 特定文字列を検索してそれ以外を出力するプログラムを書きたいです。 たとえば $aaa = 111111,222222,333333; $haifu = 111111; preg_match("/$haifu/", $aaa, $haifu_non); 結果 $haifu_non : 111111 となるところを カンマ区切りの$aaaで$haifuと一致しなかった 222222,333333 を受け取るためにはどうしたらよいでしょうか? アドバイスお願いします。

    • ベストアンサー
    • PHP
  • php foreach文のあとのechoが...

    以下のスクリプトの、<echo A>の部分は出力されるのですが、 <echo B>の部分は出力されません。 何が原因なのでしょうか? // ファイル取得 $filepath = "../../reception.csv"; $file = new SplFileObject($filepath); $file->setFlags(SplFileObject::READ_CSV); // ファイル内のデータループ foreach ($file as $key => $line) { foreach ( $line as $str ){ $records[$key][] = $str; } <echo A> } <echo B>

    • 締切済み
    • PHP
  • PHP正規表現

    数字と.の文字列から 最初の.だけ残して 後の.は取り除きたいです。 *必ず数値.数値の形です。 文字列例→期待する値 12.12→12.12 121.152.4.2→121.15242 6.2.4→6.24 $varr = preg_split("/\./","6.2.4"); $varr[0] = "{$varr[0]}."; foreach($varr as $value){ $str .= $value; } echo $str; で出来るのですが、頭悪い感じがして 正規表現で1行とかできませんかねぇ

    • ベストアンサー
    • PHP
  • 文字列の検索について

    こんにちわ。文字列の検索について質問があります。 ↓のコードは、 「$str という文字列の中に"<!>" という文字列が含まれていたら、その都度その位置を 知らせる」と意図したものです。 $str の中に "<!>" が3つ含まれていたら、3回それらの位置を知らせるはずです。 しかし、実際は、最後の $iの位置だけ出力されます。 どこに問題があるのでしょうか? よろしくお願いいたします。 -------コード(ココカラ)------- for ($i=1; $i<length; $i++) { $strsub=substr($str, $i, $i+2); if ($strsub == "<!>") { echo $i; echo "\r\n"; } } -------ココマデ-------

    • ベストアンサー
    • PHP
  • php 指定文字列以降の削除

    phpにて半角スペース以降の文字列を問答無用で削除するというプログラムを作ろうとしてるのですが上手くいきません。 どうすればできますでしょうか? ご教授のほどよろしくお願いいたします。 ---- ソースコード $str = '2017/1/1 10-28'; if (preg_match("/ /", $str)){ $replace = str_replace(' ', '', $str); } echo $replace;

    • ベストアンサー
    • PHP
  • 検索の完全一致は可能か?

    エクセル(ちなみに2000ですが)上での検索で、 部分一致ではなく、完全一致で検索することは可能ですか? たとえば「love」という文字だけを探したいのですが、「almost like being in love」などの該当する文字列すべてひっかかってしまうのです。 オプション機能にはありませんので、検索時なにか記号を入れるのだと思うのですが、可能ですか?

  • 文字列検索の方法

    ○.csvという複数のファイルがあります。 内部のデーターは「,」区切りになってます。 複数のファイルの中に、あるキーワードに一致する文字列を含む ファイル名を一覧で表示する方法(プログラム)を教えてください。 雰囲気は全文検索みたいな感じです。 関数や簡単なプログラムであれば、例をあげて頂ければ幸いです。

    • ベストアンサー
    • Perl

専門家に質問してみよう