PHP検索 完全一致のみヒット
- サイト内検索で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>"; } } ?>
- asdf20xx
- お礼率50% (1/2)
- PHP
- 回答数2
- ありがとう数1
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
PHPは専門外なので、見当違いな回答ならスルーしてくださいな。 preg_match("/$val/", $kpa[0], $matches, PREG_OFFSET_CAPTURE); ↓ preg_match("/^$val\$/", $kpa[0], $matches, PREG_OFFSET_CAPTURE); としてみたらどうでしょうか?
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
>「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
- 文字列の検索について
こんにちわ。文字列の検索について質問があります。 ↓のコードは、 「$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」などの該当する文字列すべてひっかかってしまうのです。 オプション機能にはありませんので、検索時なにか記号を入れるのだと思うのですが、可能ですか?
- 締切済み
- オフィス系ソフト
お礼
おかげさまで出来ました。 ありがとうございます。