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

このQ&Aのポイント
  • MySQLでutf8_unicode_ciを使用している場合、キーワード「\P」での部分一致検索が正常に機能しない問題が発生しています。
  • 検索キーワードに「\P」と入力すると、バックスラッシュが特殊文字として解釈されず、キーワード「P」で検索されます。
  • 暗号化された検索キーワードにはバックスラッシュが含まれるため、バックスラッシュを通常の文字列として検索したい場合、特殊文字のエスケープが必要です。
回答を見る
  • ベストアンサー

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

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

  • MySQL
  • 回答数2
  • ありがとう数4

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

  • ベストアンサー
  • moousi
  • ベストアンサー率70% (21/30)
回答No.2

パターン・マッチング時にもう一回取り除かれるので、これを試してください。 select * from testtbl where test like '%\\\\P%'

yorkies
質問者

お礼

どうもありがとうございました。 \を\\\\に変更したら検索できました。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

どうやってその SQL 文を実行しているか知らんけど, 「バックスラッシュが足りない」というお約束なネタをまず最初に想定する.

yorkies
質問者

お礼

バックスラッシュが足りなかったようです。 まだ、phpmyadminにsql文を手入力し、検索結果を確かめている段階なので、 プログラムでバックスラッシュの数を変更しようと思います。 バックスラッシュの数を変更せずに検索するのはやはり無理なのでしょうか。

関連するQ&A

  • 検索キーワード

    検索バーに入力したキーワードの履歴が残ってしまうのが恥ずかしいので、対処法を教えてください。msnやyahooの検索バーに入力したキーワードが、ひと文字置いただけで過去に検索したキーワードが候補として出てきてしまうのが不都合です。家族が自分のパソコンを借りにくることがあるため、Hなキーワードを見られて恥ずかしい思いをしてしまいます。

  • 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
  • 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
  • 検索バーに、今まで検索したキーワードが残っている

    インターネットのバージョン6.0です。 検索バーに、何かキーワードを入力して検索すると、次回、また何か新たなキーワードを入力しようとすると、リストが検索バーの下に出てきて、以前に検索したキーワードが全て残っていました。 よく使う頭文字なんかは、十何桁にも及んでしまっています。とてもうっとうしいです‥‥ 頭文字を使うと、誘導してその頭文字から始まるキーワードをリストに表示してくれてるのでしょうが‥‥ 検索したことのあるキーワードをどこかで記憶しているのでしょうか? 消す方法はあるのでしょうか?

  • SQL 部分一致検索について

    カラムAとカラムBはそれぞれ文字列が格納されているとします。このとき、カラムAには「ABC」カラムBには「ABC(株)」があるとした場合、カラムAとカラムBが部分一致しているかをSQLで検索する場合、どのようなSQL文になるかご存知でしょうか? 勿論予め、検索したい文字列が判っている場合は、like '% nnnnn %' ですが、文字列が判らずカラム同士で部分一致するカラムを選択したいのです。

  • Accessでキーワード検索(抽出)

    Access97で新聞記事のデータベースを作っています。 以下のようなテーブルがメインの非常に単純なものです。 ┌──┬───┬──┬──┐ │日付│見出し│分類│備考│ ├──┼───┼──┼──┤ 新聞記事を日付やキーワードで抽出したいのですが、 キーワード検索がうまく出来ません。 パラメーターで見出し列からデータを抽出したところ、 完全に一致するデータは抽出されるのですが、 「*キーワード*」で一部合致のデータを 抽出することは出来ませんでした。 デザインビューで「抽出条件」に入力すれば 「*キーワード*」でも可能なことは確認しましたが Accessに慣れていない人に操作をさせたいため、できれば キーワード入力を促すフォーム(ダイアログ)表示 ↓ キーワードを入力して抽出 ↓ クエリー、フォーム又はレポートに表示 という手順にしたいのですが、 Accessの機能のみでそういったことはできますでしょうか? VBAを使った方がいいでしょうか?

  • 検索エンジンで検索したキーワードがアドレスでは置き換えられているについて

    検索エンジンで日本語のキーワードを入力して検索すると、入力したキーワードが%とアルファベットと数字で構成された暗号のようなものに置き換えられてアドレスバーにでてますよね。 例えばgooで「ドラえもん」と検索すると「ドラえもん」が「%A5%C9%A5%E9%A4%A8%A4%E2%A4%F3」に置き換えられてます。 あれはどうやって置き換えているのでしょうか。

  • 検索の完全一致は可能か?

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

  • 検索したキーワードはどうやったら消せるの?

    Internet Explorer(XPです)を使っているのですが、検索したキーワードが残る機能というのは解除できるのでしょうか? もしくは削除できますか? 言葉を入力すると類似した過去の入力文字が出てくる機能と、 何も入力しなくても出てくる過去のキーワードと二通りあると思うのですが、 それぞれの機能解除、もしくは削除方法を教えてください! 「ツール」の「インターネットオプション」から設定するんだと思いますが、該当するような内容が見当たりません。 彼女がPCを使ったときに、キーワードの履歴から喧嘩になってしまいました。。(こういう人は多いはず?!^^;) ご存知の方、よろしくお願いいたします!

  • 部分一致での検索方法

    Access2000のVBAで3つのオプションボタンでフィールドを選択し、1つのテキストボックス(オプションテキスト)に文字列を入力して検索ボタンで検索するプログラムを以下のような記述の仕方で作成しました。 完全一致した場合は問題なく表示されるのですが、できればテキストボックスに入力した文字列が部分一致した場合でも表示させるようにしたいのですが、どうすればよいかがわからないので教えてください。 Private Sub オプション検索_Click() Dim stFilter As String Dim stDocName As String If 特定検索 = 1 Then stDocName = "フォーム名"   stFilter = "フィールド名1='" & テキストボックス名 & "'" DoCmd.OpenForm stDocName, , , ElseIf 特定検索 = 2 Then stDocName = "フォーム名" stFilter = "フィールド名2='" & テキストボックス名 & "'" DoCmd.OpenForm stDocName, , , stFilter ElseIf 特定検索 = 3 Then stDocName = "IPForm" stFilter = "フィールド名3='" & テキストボックス名 & "'" DoCmd.OpenForm stDocName, , , stFilterOn End If End Sub