私のSQL検索は正規表現を利用しています:
$sql = " select * from table where regexp CONCAT("[[:<:]]", :searchTerm, "[[:>:]]") ";
:searchTermはバインドされた検索変数です。
現在、「well」という用語の検索を実行すると、多数の結果が表示されます。ただし、「Well」をコンマで検索すると、クエリ結果は空になります。
「[[:<:]]」と「[[:>:]]」が単語境界マーカーであり、したがってすべての句読点が無視されるため、これが起こると想定しています。
句読点も含めるようにクエリを構成する方法を知っている人はいますか?
回答:
回答№1は0組み込みの句読文字クラスを使用できます [:punct:]
句読点文字に一致するには、 ?
これは、その前の文字または文字クラスの0または1つに一致します。この場合、定義した文字クラスになります。
例えば:
$sql = "select * from table where regexp CONCAT("[[:<:]]", :searchTerm, "[[:punct:]]?[[:>:]]") ";
これは公正な警告です。MySqlの経験があまりなく、上記の例をテキストで送信しませんでした。これは機能するか、少なくとも正しい方向を示します。 正規表現演算子 mysqlドキュメントのセクション。
さらに、私は文字が何であるかわからない組み込みの句読文字クラスに含まれていますが、角括弧を使用して独自の句読文字を定義し、必要な句読文字のみを含めることができます。例えば [,.!?;:]