特定タグ以外を変換する方法

このQ&Aのポイント
  • HTML文書から特定のタグ以外を変換する方法について教えてください。
  • <[^]とiが上手く作用せず変換がうまくいかない問題について知りたいです。
  • 効率的な方法で特定タグ以外を変換する方法についてご教授ください。
回答を見る
  • ベストアンサー

特定タグ以外を変換したい

HTML文書から特定のタグ以外を変換しようとしているのですが、 [^]とiがヘンな風に作用しているのか上手くいきません。^^; わかる方いましたら教えてください。 $foo = '<a href="bar">hoehoe</a><b>auau</b>'; $foo =~ s/<(\/[^a] *.*?)>/##$1##/isg; ■希望 <a href="bar">hoehoe</a>##b##auau##/b## ■現実 <a href="bar">hoehoe##/a####b##auau##/b## 以下のようにやると効率的ではありませんがうまくいきます。 $foo =~ s/[<>]/##/gs; $foo =~ s/##(\/*a *[^#]*)##/<$1>/igs;

  • dany
  • お礼率69% (29/42)
  • Perl
  • 回答数3
  • ありがとう数5

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

  • ベストアンサー
  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.1

$foo =~ s/<(\/?[^\/a][^>]*)>/##$1##/ig; かな?

dany
質問者

お礼

ありがとうございます。:-) その後いろいろ試してこちらでも同じものに行き着きました。 ところで「()」のグループ化で「このグループ以外」って指定は できないんでしたっけ? [^(A|FONT|B|BR)] みたいな…。

その他の回答 (2)

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.3

> 「教えてあげないと」の意味がよくつかめません。 [^(A|FONT|B|BR)] の ^ に期待していることは、 <\/?([a-zA-Z]+).*> の \1 に相当するところのうちの A|FONT|B|BR 以外ってこと ですもんね。 正規表現で言うと、単純に A|FONT|B|BR 以外って言っちゃうと 長さ0の文字列や空白も、それに相当しますから。

dany
質問者

お礼

>長さ0の文字列や空白も、それに相当しますから。 そうですよね。自分でもあとから気付きました。ハズかしいです。^^; 最終的にはこんな感じになりました。 $oktag = 'A|B|FONT|BR'; $hoe =~ s/\<(?!\/?($oktag)( [^>]*)?>)([^>]*)>/&lt;$3&gt;/oisg; 実際は value="<br>" とかコメントタグが入ってくると無効になって しまいますがとりあえずはこれでいいかなと。 ありがとうございました。

  • a-kuma
  • ベストアンサー率50% (1122/2211)
回答No.2

> ところで「()」のグループ化で「このグループ以外」って指定は > できないんでしたっけ? > > [^(A|FONT|B|BR)] > みたいな…。 無い。 「このグループ以外」と言っても、あなたは暗黙に英数字からなる単語の うち、と考えているわけですから、それも教えてあげないと。 でも、私は、それを一気に書ける正規表現を知りません。

dany
質問者

お礼

やはりそうですか。ありがとうございました。 「教えてあげないと」の意味がよくつかめません。 もしよければ補足などお願いします。

関連するQ&A

  • getAttributeによるHTMLのタグ抽出について

    web上にあるHTMLで書かれた文書から、タグ別に抽出しようと思っています。以下にあるのはプログラムの一部です。 <a href~のタグだときちんと抽出できるのですが、<img src~から始まるタグでは抽出できなかったのです。どこがいけないのでしょうか? よろしくお願いします。 . . . public void handleStartTag(HTML.Tag tag, MutableAttributeSet attr, int pos) { if (tag.equals(HTML.Tag.A)) { href[i] = (String) attr.getAttribute(HTML.Attribute.HREF); i++; } else if (tag.equals(HTML.Tag.IMG)) { src[j] = (String) attr.getAttribute(HTML.Attribute.SRC); j++; } else { } } . . .

    • ベストアンサー
    • Java
  • URLの結合

    HTMLページからAタグのhref部分を抜き出し ページのアドレスとhrefの部分から 新たなリンク先を導きだしたいのです たとえば http://***.jp/foo/ と ../bar/baz.html のような文字列があって 二つを結合して http://***.jp/bar/baz.html のようにしたいのですが このような関数は用意されてないのでしょうか? PEARでもかまいません よろしくお願いします

    • 締切済み
    • PHP
  • タグをまとめれる?

    HTMLタグについてなのですが、 『ココ』(文字は赤で太字)をクリックすると他のページにリンクするように書き込むと <a href="***"><font color="RED"><b>ココ</a></font></b> このようになりました。 </a></font></b>と、続くのですが、これで良いものなのでしょうか? すっきりまとめる事は可能なのでしょうか?

    • ベストアンサー
    • HTML
  • webbrowserで特定のタグを取得したい

    VB6もしくはVBAです。 HTMLの中をループしてタグを取得しています。 For Each myTag In myIE.Document.all.tags("TD") 次のようなHTMLがあって"このTD"に含まれるAタグを取得したい場合、 指定のTD内だけでループしてAタグを取得するにはどうしたらいいのでしょうか? <table width="200" border="1"> <tr> <td><a href="#">AAAAA</a><a href="#">AAAAA</a><a href="#">AAAAA</a></td> 'このTD <td><a href="#">BBBBB</a><a href="#">BBBBB</a><a href="#">BBBBB</a></td> <td><a href="#">CCCCC</a><a href="#">CCCCC</a><a href="#">CCCCC</a></td> </tr> <tr> <td>DDDDD</td> <td>EEEEE</td> <td>FFFFF</td> </tr> <tr> <td>GGGGG</td> <td>HHHHH</td> <td>IIIII</td> </tr> </table>

  • HTMLのタグimg dynsrcの使い方

    Windows7 IE8 WMP12です。 HTMLのimg dynsrcタグで質問します。このタグ付けたページ”A”を直接開けば自動でWMP動画再生されますが a hrefタグでリンク張った他のページ名”Bから開いたらWMP表示されなく再生もされません。正しいタグ記述お願いします。 例 ページA <a href=."http://www.........B"> .ページB <mg dynsrc="http://www.......動画.WMV">

  • Perlで <a href=などタグをエンコードするパッケージってあるのでしょうか?

    Perlで <a href=などタグをエンコードするパッケージってあるのでしょうか? use HTML::Entities (); trやsを使えばよいのでしょうか?

    • ベストアンサー
    • Perl
  • ただしいHTMLタグ記法でしょうか?

    あるページのソースを見て発見したのですが、下記の記法1のHTMLタグ記法は、正しいものなのでしょうか? ●記法1 <a href="http://yahoo.co.jp/?a=1&amp;b=2">http://yahoo.co.jp/?a=1&amp;b=2</a> (注)<と>と&と;は、本来半角のところを全角で表記しています。以下同様。 疑問に思う点は、aタグのhref要素中に、&記号をHTMLエンコードしてしまってもよいのかということです。 次の記法2が一般的ではないかと(個人的に)考えています。 ●記法2 <a href="http://yahoo.co.jp/?a=1&b=2">http://yahoo.co.jp/?a=1&amp;b=2</a> 上記記法1は、妥当な記法でしょうか? また、多くのブラウザでも対応しているのでしょうか? Windows版のIE7とFireFox2では問題なく動作しているようです。 お詳しい方、ご回答お願いします。

    • ベストアンサー
    • HTML
  • 特定の文字列をHTMLタグに変換・urlについて

    #------------------------------------------------- # BBCode(特定の文字列をHTMLタグに変換) #------------------------------------------------- の中の、文字列なんですけれども $str =~ s/\[url=((?:htt|ft)ps?\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%\,]+)\](.*?)\[\/url\]/<a href=\"$jumpcgi?$1\" target=\"$target\" rel=\"nofollow\">$2<\/a>/ig; urlのものが、変になります。 http://www28.atpages.jp/wrsend1/patio/read.cgi?no=4 ↑みたいになってしまいます。 http://www.gemani.org/titi4/read.cgi?no=1391 ↑のように文字でリンクさせるにはどうしたらいいでしょうか。

    • ベストアンサー
    • Perl
  • RubyによるCGIプログラミング(ページ移動)

    RubyによるCGIプログラミング(ページ移動) kamuycikapです。 Rubyを利用してCGIを書いています。 <やりたい事> HTML(A) → CGI → HTML(B) 上記のように、ホームページAのformタグからcgiをコールしております。 cgiから別ページに飛ぶにはどのようなコードを書けばいいのでしょうか?? WWW::Mechanizeを利用してsubmitボタンをクリックするようなプログラムにしなければならないのでしょうか? 今までは HTML(A) → CGI までで、CGIの中でputsやprintf等を利用してタグを出力し、ページを作っていましたが、やりたい事はCGIから新たに別ページに飛びたいのです。 httpタグで書くとするなら、<a href="http://www.hogege/foo.html">bar</a>を踏むような感じをイメージしています。 識者の方、ご教示願います。

    • ベストアンサー
    • Ruby
  • Perl 特定のタグ内を置換しない

    恐れ入ります。特定のhtmlタグ具体的には<h3></h3>タグないの文字列だけを除いて置換を掛けたいのですがなかなかうまくいきません。 $temp = s/[^<h3>(.+?)<\/h3>]$mojiretu1/<a href="$mojiretu2">リンク先</a>/; とした場合、<h3>タグ内の置換はされないようですが、置換後のリンク先の先頭部分が文字化けを起こしてしまいます。原因が分かる方いらっしゃいましたらご教授いただけたら助かります。 よろしくお願いいたします。