正規表現でHTML内の特定の項目内容に""をつける方法

このQ&Aのポイント
  • C#の正規表現を使用して、HTML内の特定の項目内容に""を付ける方法を考えています。
  • 現在は=の右側にある内容を""で囲む処理をしていますが、エラーが発生します。
  • HTMLタグ内の属性の値だけでなく、文字列内の一部に含まれる=にもヒットしてしまいます。どのようにすれば解決できるでしょうか?
回答を見る
  • ベストアンサー

正規表現 ""で囲まれた内部は処理しない方法

正規表現でタグ内の項目内容に""をつける処理を考えています。 現在は、= の右側にある内容を""で囲む処理をしています。 C#で書いたコードは次ような感じです。 text = Regex.Replace(text, "(\\S)=([^\"' >]+)","$1=\"$2\"" ,RegexOptions.Singleline); このときに次のようなHTMLコードがあった場合、  <div id=000 class="tayp1,type2">  <div id="111" class=type1>  <img src="200.gif" alt="100+100=200"> すると次のような結果になります。  <div id="000" class="tayp1,type2">  <div id="111" class="type1">  <img src="200.gif" alt="100+100="200""> 3行目はalt内にも=があるため間違った処理をしてしまいます。 誤:alt="100+100="200"" このような""内部は処理しないようにするにはどうすればよろしいでしょうか? ""内部の=にはヒットしななれば…と思っているのですが。 よろしくお願いします。

  • muuuuu
  • お礼率75% (101/133)

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.4

#1,#2です。お書きの部分が、[^\"' >]+ となっていたので、空白は除外かと思っていました。 最初から"で囲まれていた場合は、先にマッチさせて元と同じ物に置換すれば良いですね。 text = Regex.Replace(text, "(\\s\\w+)=\"([^\"]*)\"|(\\s\\w+)=([^\"' >]+)","$1$3=\"$2$4\"" ,RegexOptions.Singleline); かな。 ' で囲まれた物も対象にしたければ同じ調子で。

muuuuu
質問者

お礼

回答ありがとうございます! 目的通りに処理ができました。 ""で囲まれているものと囲まれていないものという分け方はとても思いつきませんでした。 とても勉強になりました。 ありがとうございます。

その他の回答 (3)

回答No.3

""で囲まれた範囲にある = を "=" にでも置換。 さっきのコードを実行。 置換した部分を元に戻す。 ってなのはどうでしょう。 普段正規表現使わないのでスマートな方法が思いつきませんでした。 ただの置換操作なので予期しないバグがでてくるかも(既存のコードに"="が入ってる場合とか。無いとは思うけど…) 字句解析のほうが正規表現よりは安定そうですね。

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.2

>事例として数式を書いたのですが、実は文字列に対応できればと思っています。 数字でも文字でも空白でなければ関係ないです。 alt="aaa bbb=zzz" のように、属性内に空白と= の両方が含まれているケースがあると言うこと??? >たとえば、パラメータのデータなどで""内に=が使われていたりします。 ていうか、それが元の質問の趣旨ですよね?

muuuuu
質問者

お礼

はい、ご指摘の通りです。 まさに例に出していただいたような場合にうまくいきません。 私の例として出したのが相応しくありませんでした。 よろしくお願いします。

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.1

text = Regex.Replace(text, "(\\s\\w+)=([^\"' >]+)","$1=\"$2\"" ,RegexOptions.Singleline); でどうでしょう?

muuuuu
質問者

お礼

回答ありがとうございます。 事例として数式を書いたのですが、実は文字列に対応できればと思っています。 たとえば、パラメータのデータなどで""内に=が使われていたりします。 よろしくお願いします。

関連するQ&A

  • 正しい正規表現を教えてください

    お世話になります。 正規表現で次のように指定しているのですが、正確か自信がありませんので 正しい表記を教えてください。 1.全てのHTMLタグ <.*?> 2.「2012.1.1」または「2012.01.01」のような数字の羅列 (\d{4}).(\d{1,2}).(\d{1,2}) 3.「<img src="~」から始まる部分 <img src=" 4.「<div class="release">」を含む部分 <div class="release"> 5.HTMLタグと文字全て ^.*$ 全て色々なサイトで調べて表記したのですが、処理に時間がかかってて間違っている気がします。 yahoo!pipesのregexモジュールの部分で使用していて、デバッガーのTime takenに時間がかかっている場合、正しくない正規表現が原因らしいのです。 どうぞ宜しくお願いします。

    • ベストアンサー
    • PHP
  • 正規表現 C#

    こりんご様、皆様 ご回答ありがとうございます。 でもまだ、私の理解力が足りず、応用が利かないのでまた質問させて下さい。 以下のページの176行目 http://my.chiebukuro.yahoo.co.jp/my/myspace_quedetail.php?writer=sescode7689 ↓この部分を正規表現で取得したいので "yj-guid" この様に書いて見ました。↓ Regex re = new Regex(@"<span class=(?<hiduke>.+?)>現在位置", RegexOptions.Singleline); でも取得できないのです。 どの辺りが違うのでしょうか? 教えて下さい。 応用力を付けたいです。 宜しくお願いします。

  • 正規表現に困っています!!

    以下のような文字列にある「@1」・「@2」・「@3」・「@4」を抜き出したいのですが、 どんな正規表現を使用すれば良いか教えて頂けると非常に助かります。 <!-- #BeginLibraryItem "/Library/image01.lbi" -->\r\n <div class="@1"><img src="@2" alt="@3"></div>\r\n <p class="captionBlockA01 center">@4</p>\r\n <!-- #EndLibraryItem -->

  • (C#)1バイトの正規表現

    下記のような正規表現による置換をほどこしました。 Buffer=Regex.Replace(Buffer,"^[\x00-\xff]{100}","",RegexOptions.Singleline); 文字列の先頭の100バイトを削除する正規表現ですが、うまく動作しません。 どうも文字コードに問題があるようなのですが、原因のわかる方いらっしゃいますか?

  • wordpressで

    wordpressを使ってブログを作っています。しかしcssを読み込んでくれません。 index.phpの内容は <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" /> <title><?php bloginfo('name'); ?><?php wp_title(': '); ?></title> <meta name="generator" content="WordPress <?php bloginfo('version'); ?>" /> <!-- leave this for stats please --> <link rel="alternate" type="application/rss+xml" title="<?php bloginfo('name'); ?>(RSS 2.0)" href="<?php bloginfo('rss2_url'); ?>" /> <link rel="alternate" type="application/atom+xml" title="<?php bloginfo('name'); ?>(Atom)" href="<?php bloginfo('atom_url'); ?>" /> <link rel="stylesheet" type="text/css" href="<?php bloginfo('stylesheet_url'); ?>" /> </head> <body> <div id="rap"> <div id="header"> <div id="headerimg"> <h1><a href="<?php echo get_settings('home'); ?>/"><img src="img/title.gif" alt="芦澤治療院はやさしいマッサージで施術いたします。" /></a></h1> </div> <div id="headernavi"> <div id="navi"> <ul> <li><a href="#"><img src="img/link.gif" alt="" border="0" /></a></li> <li><a href="#"><img src="img/sitemap.gif" alt="" border="0" /></a></li> <li><a href="#"><img src="img/inquary.gif" alt="" border="0" /></a></li> </ul></div> <div id="size"> <img src="img/sizeword.gif" alt="" /> <a href="#"><img src="img/sizesmall.gif" alt="" border="0" /></a> <a href="#"><img src="img/sizemiddle.gif" alt="" border="0" /></a> <a href="#"><img src="img/sizebig.gif" alt="" border="0" /></a></div> </div> </div> <div id="navcontainer"> <ul> <li class="news"><a href="#">ニュース</a></li> <li class="cut"><img src="img/linecut.gif" alt="" /></li> <li class="work"><a href="#">施術の案内</a></li> <li class="cut"><img src="img/linecut.gif" alt="" /></li> <li class="stuff"><a href="#">スタッフ</a></li> <li class="cut"><img src="img/linecut.gif" alt="" /></li> <li class="qa"><a href="#">よくある質問</a></li> <li class="cut"><img src="img/linecut.gif" alt="" /></li> <li class="inq"><a href="#">お問い合わせ</a></li> </ul> </div> <!-- end header --> <div id="content"> <div id="main"> <?php if(have_posts()):while(have_posts()):the_post();?> <div class="post"> <h2><?php the_title();?></h2> <?php the_content();?> <p class="postmetadate"> <?php the_time('Y年m月d日 H:i')?>|<?php comments_popup_link ('コメント(1)','コメント(2)','コメント(%)');?> </p> </div> <?php comments_template();?> <?php endwhile;endif;?> </div> </div> </div> </body> </html> です。 ディレクトリ構造はindex.htmlとstyle.cssは同じフォルダにあります。

    • 締切済み
    • PHP
  • 正規表現

    分かりづらい質問で申し訳ありませんが、PHPの正規表現で教えて下さい。 現在下記のような文字列があります。 見やすく改行しましたが、本来は改行はなく、1行です。 最初にPタグがあり、次に複数のクラスが付いたdiv(これを①とします)、同じく複数のクラスが付いたdivタグ(これを②とします)があるような構造です。 このdivタグの中にはfigureタグ、その中にimg タグがあります。 ②番目のdivの中のimgのsrcには特定の文字列があります。 この特定の文字列を含む親のdivタグ全体を抜き出す正規表現を書きたいと思っています。 つまり、正規表現の結果下記部分が抽出できればと思います(これを「正解」とします)。 <div class="(省略)"> <figure> <img src="{特定の文字列}"> </figure> </div> 現在このように記述しましたが、①、②全てのdivが取得されてしまっている状態です。 「/<div class="se-component se-image-container __se__float-none" contenteditable="false">(?>).*<\/div>/i」 これを「正解」のように抽出するにはどのような正規表現になるのでししょうか? よろしく御願い致します。 <p>ghoge</p> <div class="se-component se-image-container __se__float-none" contenteditable="false"> <figure style="margin: 0px;"><img src="data:image/jpeg;base64,/9j/4AA" alt="" data-rotate=""> </figure> </div> <div class="se-component se-image-container __se__float-none" contenteditable="false"> <figure style="margin: 0px;"><img src="{特定の文字列}" alt="" data-rotate=""> </figure> </div>

    • ベストアンサー
    • PHP
  • CSSでの配置方法

    今学校の課題でCSSをやっています。 画像を「position」のタグで自分のやりたいように配置できません。 本やHPを参考にまねをしてみているのですが、それでもうまく配置できません。 -------------------------------------- <html> <head> <title>MY RADIO FLYER</title> <link rel="stylesheet" type="text/css" a href="stop.css"> </head> <h1><div class="section"> <img id="top" src="image/myradioflyer.gif"> </div></h1> <h2><div class="section2"> <img id="spec" src="image/spec.gif"> <img id="photo" src="image/photo.gif"> <img id="top photo" src="my radio flyer/a.jpg" alt=""> </div></h2> </html> ------------------------------------------ body {background-color: #ff0000;} div.section{align:center;} div.section2{align:left;} img#top photo{ position: absolute; right:80px; top:40px;} ------------------------- 今こんな感じでやっています。 ひとつひとつの画像それぞれを操りたいのですが、全くできません。 また、配置には関係の無いはずのタグを追加しただけでも、配置が換わってしまったりと、全くもってわからなくなってしまいました。 どなたかよろしければ配置方法教えてください。

    • ベストアンサー
    • HTML
  • tableの作成方法について

    よろしくお願いします。 表を以下のように作成しました。 表の横のラインに罫線を引きたいのですが記述方法が分かりません。 表の周りにはcssで記述して2pxの罫線を引いてあります。 どなた様か、ご指導の程よろしくお願いします <table> <tr> <td rowspan="3" class="b"><img src="img/wg.jpg" alt="パソコンノウハウ" width="190" height="250" /></td> <td class="c"><img src="img/txt21.gif" alt="" width="168" height="24" /><br /> </td> </tr> <tr> <td class="d"><img src="img/9.gif" alt="パソコンノウハウ" width="41" height="63" /> <img src="img/ten.gif" alt="パソコンノウハウ" width="21" height="63" /><img src="img/8.gif" alt="パソコンノウハウ" width="41" height="63" /> <img src="img/0.gif" alt="パソコンノウハウ" width="41" height="63" /><img src="img/0.gif" alt="パソコンノウハウ" width="41" height="63" /> <img src="img/en.gif" alt="パソコンノウハウ" width="131" height="63" /></td> </tr> <tr> <td class="e"><a href="http://www."><img src="img/enter_off.gif" alt="" width="349" height="83" /></a></td> </tr> ----------------------------------------------------------------ここに横の罫線を引きたいのですが記述方法が分かりません。 <tr> <td rowspan="3" class="b"><img src="img/wg.jpg" alt="パソコンノウハウ" width="190" height="250" /></td> <td class="c"><img src="img/txt22.gif" alt="" width="103" height="23" /><br /> </td> </tr> <tr> <td class="d"><img src="img/1.gif" alt="パソコンノウハウ" width="41" height="63" /><img src="img/0.gif" alt="パソコンノウハウ" width="41" height="63" /> <img src="img/ten.gif" alt="パソコンノウハウ" width="21" height="63" /><img src="img/8.gif" alt="パソコンノウハウ" width="41" height="63" /> <img src="img/0.gif" alt="パソコンノウハウ" width="41" height="63" /><img src="img/0.gif" alt="パソコンノウハウ" width="41" height="63" /> <img src="img/en.gif" alt="パソコンノウハウ" width="131" height="63" /> </td> </tr> <tr> <td class="e"><a href="http://"><img src="img/enter_off.gif" alt="" width="349" height="83" /></a></td> </tr> </table>

    • ベストアンサー
    • HTML
  • 横並びにするCSS

    以下のdivタグ内のimgタグを横並びに表示するCSSは .container{ display:flex; } で合っていますか? <body> <section class="container cf"> <div class="hoge"><img src="img1.jpg" alt=""></div> <div class="hoge"><img src="img2.jpg" alt=""></div> <div class="hoge"><img src="img3.jpg" alt=""></div> <div class="hoge"><img src="img4.jpg" alt=""></div> </section> </body>

    • ベストアンサー
    • CSS
  • CSSで横並び

    divタグ内のimgタグを横並びに表示するCSSは、 .container cf{ display:flex; } で合っていますか? <body> <section class="container cf"> <div class="hoge"><img src="img1.jpg" alt=""></div> <div class="hoge"><img src="img2.jpg" alt=""></div> <div class="hoge"><img src="img3.jpg" alt=""></div> <div class="hoge"><img src="img4.jpg" alt=""></div> </section> </body>

    • ベストアンサー
    • CSS

専門家に質問してみよう