
Postgres 8.3.9を使用しています。
現在使用しているテーブルの中に
HTMLソースを格納しているカラムがあります。
テーブル名:contents
カラム名:text
※データ例:<a href="http://www.google.co.jp">グーグル</a>
HTMLソースが格納されたカラムに対して、キーワードでの検索を行いたいと考えています。
当然ながら以下の様に検索をすると、HTMLソース(例:href)をキーワードとしても検索に引っかかってしまいます。
select * from contents where text Like '%【検索キーワード】%';
なんとか、HTMLソースをキーワードとした場合は検索されずに、
HTMLタグに囲まれた部分(※上記データだと'グーグル')をキーワードとした場合にだけ、
検索されるようにしたいと考えています。
何か良い手法はないでしょうか。
ご教授をお願い致します。
No.2ベストアンサー
- 回答日時:
演算子~*の~は正規表現に一致する検索、
*は大文字小文字を区別しないという意味
です。
正規表現'.*>[^<]*★.*<.*'について
始めの".*"は任意の文字列を示します。
"."は任意の文字、"*"は0回以上の一致を
表わします。次の">"はタグの終わりを表す
文字です。次の"[^<]*"は"<"でない文字が
0回以上("*"です)続くことを示します。
"[]"はグループ化、"^"は否定を意味します。
例えば[^0-9]は「数字ではない」ということ。
'.*>[^<]*'は'~>~'ということです。
この後にキーワードが続きます。
★の後の'.*<.*'はもうお分かりですね。
'~<~'ということです。この記述は
">"と"<"の間にあるキーワードを探すことに
なります。但し、<xxx y="aa>bb" z="★">の
ようなタグがあると、誤認します。">"が
引用符の中かどうか分かりませんからね。
気をつけていただきたいのはキーワードの中に
"."とか"*"のように正規表現上、意味のある
文字を含む場合はエスケープする必要があると
言うことです。
以下を参考にして、試行錯誤してみてください。
http://www.postgresql.jp/document/pg842doc/html/ …
少し前のバージョンでは"+"を正しく解釈して
くれませんでした。現バージョンで直っている
かどうかは不明です。
なるほどです。
ご丁寧に説明いただきありがとうございました。
とても勉強になりました。
自分でも頑張ってみます。
本当にありがとうございました。
No.1
- 回答日時:
意味が良く分かりません。
例えば、"href"がキーワードの場合
(1)<a href="http://www.google.co.jp">グーグル</a>
(2)<a href="http://www.google.co.jp">href</a>
(1)はヒットせず、(2)はヒットするということ?
だとすると、こんな感じでしょうか?
select * from where text ~* '.*>[^<]*★.*<.*'
★の所はキーワード
Postgresの場合、正規表現によるマッチング演算子は6個
あるので、Likeよりずっと応用範囲が広い。但し、使い
こなすのは凄く難しい。正規表現がJava等のものと微妙に
異なるし、詳しい説明は何処にもない。
私も「体」で覚えました。いろいろ試してみてください。
サンプルが正しいかどうか分かりませんから・・・
この回答への補足
私の説明が悪かったですね。
すみません。。。。
<a href="http://www.google.co.jp"> グーグル</a>
データとして上記の様なHTMLソースがカラムに登録されています。
そのカラムに対してキーワードで検索を行う際、
HTMLタグ部分は検索対象から外したい、という意味です。
上記データの場合、
※"グーグル"というキーワードで検索するとヒットする。
※" href"の様にHTMLタグをキーワードで検索するとヒットしない。
>だとすると、こんな感じでしょうか?
>select * from where text ~* '.*>[^<]*★.*<.*'
>★の所はキーワード
先程、ご教授頂いた正規表現はどのような意味になるのでしょうか。
正規表現の知識が乏しく、私の頭では理解できませんでした。。。
申し訳ございません。
宜しくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Excel(エクセル) セルの値をグーグルで検索するエクセルVBAについて! 2 2022/08/01 21:41
- Excel(エクセル) エクセルVBAについて質問です。 2 2022/12/09 17:59
- その他(ブログ) ブログを始めたいと思うのですが、下記のような場合のおすすめブログサービスを教えてください。 収益化な 4 2023/04/10 10:01
- Google+ ネットで晒されてないか 3 2023/04/20 02:28
- SEO SEOの検索順位について 例えばあるキーワードで検索順位が6位だとしたら、そのキーワードに関連する良 1 2022/06/30 21:51
- その他(プログラミング・Web制作) LINEアプリの開発について。オブジェクトの名前が教えてください 1 2023/02/23 09:31
- ホームページ作成・プログラミング パスワードつきホームページ トップページ以下はどうなる 6 2022/08/16 12:04
- 教えて!goo 指摘されたので質問です 1 2022/04/17 14:11
- ライフスタイル・ヘルスケア URLを開くアプリが見つかりません 2 2022/09/16 12:09
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
HTMLソースの検索について
-
UPDATEで既存のレコードに文字...
-
sqlite select 表示されない
-
SQL*LOADER実行時のロードデー...
-
hp z200 sffというパソコンな...
-
Excelでしりとりを作る方法
-
エクセルで去年のデータを今年...
-
Java環境で使用するAccessデー...
-
SQL Server2008のクエリの書式...
-
DBをまたいで更新
-
SQLローダーについて
-
'modify' 付近に不適切な構文が...
-
フラグをたてるってどういうこ...
-
【Access】SQL文教えてください!
-
SQL文はなぜ「作成」ではなく「...
-
C#にVBにあるビジュアル データ...
-
ExcelVBAで複数のコマンドボタ...
-
【ExcelVBA】範囲選択の方法に...
-
たぷる・・・初学者 Python 4
-
自己結合による新しいカラムの作成
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UPDATEで既存のレコードに文字...
-
SQL*LOADER実行時のロードデー...
-
OracleのLONG型への insert に...
-
【DB2】VARCHAR拡張時のデータ...
-
カラム名を変更するには
-
【SQL】同値のレコードがある場...
-
Access VBA フィールドの追加と...
-
sqlite select 表示されない
-
【SQL】他テーブルに含まれる値...
-
フラグをたてるってどういうこ...
-
SELECT INTOで一度に複数の変数...
-
sqlに記述できない文字
-
truncate tableを使って複数の...
-
PostgreSQLのtimestamp型で時間...
-
エラーを起こす方法
-
既存データをINSERT文にして出...
-
オラクルのUPDATEで複数テーブル
-
SQLで、Join句で結合したテ...
-
timestampのデータはどのように...
-
selectの単純繰り返し
おすすめ情報