- ベストアンサー
HTMLソースの検索方法とは?
- Postgresを使用している場合、HTMLソースを含むカラムに対してキーワードでの検索を行いたいが、HTMLタグを含まない部分が検索対象となってしまう場合、どのように対応するかについて教えてください。
- HTMLソースを格納したカラムに対してキーワードでの検索を行いたいが、HTMLタグに囲まれた部分のみを検索対象としたい場合、良い手法はありますか?
- Postgres 8.3.9を使用しているテーブルの中に、HTMLソースが格納されたカラムが存在します。HTMLソースをキーワードとして検索すると、HTMLタグを含まない部分も検索されてしまいます。これを回避する方法について教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
演算子~*の~は正規表現に一致する検索、 *は大文字小文字を区別しないという意味 です。 正規表現'.*>[^<]*★.*<.*'について 始めの".*"は任意の文字列を示します。 "."は任意の文字、"*"は0回以上の一致を 表わします。次の">"はタグの終わりを表す 文字です。次の"[^<]*"は"<"でない文字が 0回以上("*"です)続くことを示します。 "[]"はグループ化、"^"は否定を意味します。 例えば[^0-9]は「数字ではない」ということ。 '.*>[^<]*'は'~>~'ということです。 この後にキーワードが続きます。 ★の後の'.*<.*'はもうお分かりですね。 '~<~'ということです。この記述は ">"と"<"の間にあるキーワードを探すことに なります。但し、<xxx y="aa>bb" z="★">の ようなタグがあると、誤認します。">"が 引用符の中かどうか分かりませんからね。 気をつけていただきたいのはキーワードの中に "."とか"*"のように正規表現上、意味のある 文字を含む場合はエスケープする必要があると 言うことです。 以下を参考にして、試行錯誤してみてください。 http://www.postgresql.jp/document/pg842doc/html/functions-matching.html#FUNCTIONS-POSIX-REGEXP 少し前のバージョンでは"+"を正しく解釈して くれませんでした。現バージョンで直っている かどうかは不明です。
その他の回答 (1)
- nda23
- ベストアンサー率54% (777/1416)
意味が良く分かりません。 例えば、"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 ~* '.*>[^<]*★.*<.*' >★の所はキーワード 先程、ご教授頂いた正規表現はどのような意味になるのでしょうか。 正規表現の知識が乏しく、私の頭では理解できませんでした。。。 申し訳ございません。 宜しくお願い致します。
お礼
なるほどです。 ご丁寧に説明いただきありがとうございました。 とても勉強になりました。 自分でも頑張ってみます。 本当にありがとうございました。