• ベストアンサー

タグを削除する正規表現について

<("[^"]*"|'[^']*'|[^'">])*> とうい正規表現があります。HTMLのタグを削除するタグとういことですが、意味がわかりません。 "<"、">"の括弧の意味はわかります。"( )"はグループ化という意味もわかります。"|"はorという意味もわかりますし、*は一つ前の文字列が0以上というのも理解しています。[]は中の文字列のいずれかに該当するという意味もわかります。ただ、 "[^"]*" '[^']*' [^'">] の個々の意味を考えるとわかりません。 "[^"]*"は最初にダブルクオテーションが出てきて、^ or "が0個以上該当するという意味にとらえてしまいます。なにとぞご解説お願いいたします。 ちなみにhttp://www.mnet.ne.jp/~nakama/を参考にしています。

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

  • ベストアンサー
noname#194317
noname#194317
回答No.2

まず、[]の意味を説明しておきましょう。[]はキャラクタクラスを示し、[]で囲まれた文字のいずれかにマッチします。[abc]だと、a,b,cのいずれにもマッチします。 [^]はネガティブキャラクタクラスで、囲まれた文字列以外のものにマッチします。[^abc」だと、a,b,cにはマッチせず、それ以外の文字列にマッチします。 ということで、不明と言われている正規表現を分解してみましょう。 1)"[^"]*"  --> " [^"] * " と解釈されます ダブルクオートで始まり、ダブルクオート以外の文字が0回以上繰り返し、ダブルクオートで終わる文字列にマッチします。つまり、ダブルクオートで囲まれた文字列全てにマッチすることになります。 2)'[^']*'  --> ' [^'] * ' と解釈されます 上記ダブルクオートの時と同じです。シングルクオートで始まり、シングルクオート以外の文字が0回以上繰り返し、シングルクオートで終わる文字列にマッチします。 3)[^'">] これは単純に、ネガティブキャラクタクラスそのものです。シングルクオート・ダブルクオート・不等号以外のものにマッチします。 ということは、不等号(小なり)で始まり、1)or2)or3)の0回以上の繰り返しが続き、不等号(大なり)で終わる文字列にマッチすることになります。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

[^"]の意味は、^ or "でなくて、"じゃない文字の意味です。 []の中では^は否定の意味になります。 <hoge id="hogege" xx ='fuga' > をマッチさせたいのだと思います

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • タグを正規表現で完全に削除

    こんばんわ~ときどきこちら様でお世話になってます タグ(Java ScriptやHTML中のCSS等きわめて複雑なものも含む)を完全に削除してウェブサイトの文字だけを抜き出したいんですけど自分にはハードルが高すぎたみたいです^^; http://www.din.or.jp/~ohzaki/perl.htm#HTML_Tag いろいろ調べているうちにこちらのサイト様を発見し、 $none_tag =~ s/$tag_regex//; とやってみましたがなぜかタグが残ってしまいます。 とあるサイトの【文字】だけを抜き出せれば良いのでタイトルに正規表現と記載しましたがその他の方法でも構いませんのでよろしくお願いしますm(_ _)m

    • ベストアンサー
    • Perl
  • |。ってなんですか? 正規表現

    正規表現の学習中です。読んでいる本の中に次の式がありました。  (?<=^|。)[^。]+。 日本語の文章の中から一文を抽出するための正規表現です。  。以外の文字がダーッと連なった後に。が来る文字列 とのことです。  [^。]は。以外の文字  +はそれが1個以上ある ですから  [^。]+ は  。以外の文字が1個以上ある という意味です。 その後に。が付きますから、  [^。]+。 だけで  。以外の文字がダーッと連なった後に。が来る文字列 ということになります。 では  (?<=^|。) の意味は何でしょう。  (?<=なんたら) は後方参照を意味しますから、 ^|。 のすぐ後に [^。]+ が続くと言いたいのでしょうか。 だとすると  ^|。 が問題です。  ^もしくは。 という意味なら、^は正規表現で記号として使われている文字ですから、  \^|。 と表現されそうなものです。 それに、。は文末でしか利用されない文字ですから、これに注目して検索を行うというのは理解できますが、^は日本語でなんら特徴を持つ文字ではありません。  ^もしくは。 という理解は間違いでしょう。 それでは^を記号として考えるとして、その前後を[]で囲んでいないから、この^は文字列の先頭を表すのでしょうか。そうすると件の正規表現は  先頭の|。のすぐ後から。以外の文字が連なった後に。が来る文字列 という意味になります。日本語の一文を抽出する正規表現という解説にかなり近づいてはいます。 しかし  |。 とは一体何? |はorを意味する記号ですが、  何とか or 。 という意味でしょうか。 でも「何とか」は「何とか」なりに何か文字表現がなされていても良さそうですし、それに  先頭の「何とか」または。のすぐ後から・・・ という解釈は意味不明。  |。 はどのように解釈すべきなのでしょうか。 お手数をお掛けします。

    • ベストアンサー
    • Perl
  • Javascriptで正規表現を使って HTMLタグの[id="hea

    Javascriptで正規表現を使って HTMLタグの[id="header-nav"]のような文字列がある場合に[id="headerNav"]というように一斉に置換するにはどういったふうに書けば良いでしょうか?

  • この正規表現を教えてください。

    「小説、ドキュメンタリー(社会、動物)」 のような文字列があり、括弧内の”、”だけを”/”に変換して 「小説、ドキュメンタリー(社会/動物)」 のようにする正規表現はどのようにしたらよいでしょうか。 どうかお教えくださいませ。

    • ベストアンサー
    • Perl
  • 正規表現

    いつもお世話になっております。 早速質問させていただきます。 文字列中に {{○}} を検索し、マッチさせるための 正規表現を教えてください。 (中括弧×2 英数字 中括弧×2) ○には、英数字が入る可能性がございます。 {{○}} は複数個あるかもしれないので、preg_match_all() を 使用したほうがいいかと考えております。 よろしくご教示お願いいたします。

    • ベストアンサー
    • PHP
  • 正規表現でHTMLタグの属性まで選んで抽出

    現在、掲示板をPHPで作っています。 入力された文字列の無効化と許可タグの分別に正規表現を使いたいと考えております。 そこで、現状では、まずすべての < > を特殊文字に変換し、その後に、許可タグ(属性)のタグを < > にもどそうとしています。 たとえば、fontタグならcolorとsizeを許可しようとして、次のような正規表現を作ってみましたが、うまくいきません。 /&lt;font((( )*(color=)[\"\']?.{1,7}[\"\']?)|(( )*(size=)[\"\']?.{1,2}[\"\']?))*&gt;/i 正規表現はまだ勉強し始めたところで、おかしなところだらけだと思いますが、何かヒントだけでもいただけたらと思います。 どうぞよろしくお願いします。

    • ベストアンサー
    • PHP
  • 正規表現を教えてください。

    正規表現を教えてください。 C#で正規表現を用いた文字列検索を勉強中なのですが、うまくマッチさせることができません。教えていただけないでしょうか。 検索対象の文字列は下のようになります。 キーワード;値; 文字列中に該当するキーワードが存在する場合に、その値を取得するプログラムを考えています。しかし、私の正規表現では2つ目の「;」を検出してしまい、キーワードのみを取得することが出来ずに困っています。 見当違いの表記をしているとは思うのですがどなたかお助けください。 match = Regex.Match(line, "^(.*);"); C#初心者なものです。

  • 正規表現でタグの一部を削除したい

    Dreamweaverの検索および置換で正規表現を使用して、サイト内で使用されている<a>タグの中の「title=""」を削除したいです。どうぞよろしくお願いします。 例としては下記のような感じです。 【修正前】 <a title="ここは文字列が入っています" href="index.html" class="link">リンク文字</a> 【修正後】 <a href="index.html" class="link">リンク文字</a> 「title=""」の「””」に入っている文字列は同じ文字もありますが、基本的にすべて違います。 また、例では<a>タグの中に「href」「class」が入っていますが、リンク先が違ったり、class名が違ったり、「id」が入っていることもあります。

    • ベストアンサー
    • CSS
  • 正規表現で分かりません

    例えば以下のようなパターンの正規表現チェックがあるのですが、 どのようなものを意味しているか分かりません。 教えていただけますでしょうか。 よろしくお願いします。 以下の情報は調べたのですが。 +(プラス)・・・直前の1文字の1回以上の繰り返しを表現 . (ピリオド)・・・改行コード以外の1文字にマッチするか否か [ ](大括弧)・・・囲みの中に書かれた任意の1文字にマッチするか否か ^([^ ]+) +[^ ]+.+S3.lzh

  • PHP5の正規表現でうまくマッチできない

    PHP5の正規表現で文字列中の独自タグをパースしようとしていて、 うまくいかず困り果てています。 正規表現パターンは、/<tag>.*<\/tag>/ 対象文字列は、<tag>こんにちは</tag><tag>こんばんは</tag> preg_match_all('/<tag>.*<\/tag>/', '<tag>こんにちは</tag><tag>こんばんは</tag>', $result) でマッチした文字列は、 $result[0]:<tag>こんにちは</tag> $result[1]:<tag>こんばんは</tag> となることを期待しているのですが、 実際は、 $result[0]:<tag>こんにちは</tag><tag>こんばんは</tag> となりました。 <tag>タグの間に入る文字列長、文字列フォーマットは不定です。 どうすれば期待通りの振る舞いに出来るでしょうか?

    • ベストアンサー
    • PHP