htmlタグの属性を正規表現で抽出 への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 shu  (社会人) 投稿日時 2012/2/23 17:34:48
rtf構文は調べてないのでイメージだけですが以下のような感じで出来ると思います。

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim reg As New Regex("<(?<tagName>.+?)( (?<attrName>.+?)=(?<attrValue>.+?))*>")

        TextBox2.Text = reg.Replace(TextBox1.Text, AddressOf MatchEval)
    End Sub

    Private Function MatchEval(m As Match) As String
        Dim strRet As New System.Text.StringBuilder

        strRet.Append("<")
        strRet.Append(m.Groups("tagName").Value)

        Dim capAttrName = m.Groups("attrName").Captures()
        Dim capAttrValue = m.Groups("attrValue").Captures()
        Dim intIdx = 0

        Do While intIdx < capAttrName.Count
            strRet.Append(" ")
            strRet.AppendFormat("[blue:{0}]", capAttrName(intIdx).Value)
            strRet.Append("=")
            strRet.AppendFormat("[red:{0}]", capAttrValue(intIdx).Value)
            intIdx += 1
        Loop

        strRet.Append(">")

        Return strRet.ToString
    End Function
投稿者 Regex  (高校生) 投稿日時 2012/2/21 17:54:47
初めて投稿します。

今VBでhtmlのエディタを作成しているのですが、RichTextboxでタグの色を変えるときに正規表現を使用しています。

そこで、ある程度の色付けは実装できるのですが、タグの中まで詳細に色付けすることが今の能力ではできません。

たとえば <input type="checkbox" checked="true" id="test"> とやった時に、「type=」、「checked=」、「id=」 を取り出して赤に色付けし、「"」から「"」までの範囲を緑で色づけしたいときはどのような正規表現を用いるとできますか?

今のところある程度の色付けに関しては


'カラーテーブルを削除するコード 
        Dim s As String, ss As String
        Dim t1 As Integer, t2 As Integer
        s = RithTextBox1.Rtf
        t1 = s.IndexOf("{\colortbl")
        If t1 > 0 Then
            t2 = s.IndexOf("}", t1)             'カラーテーブルが有った場合{の次の}を探す  
            ss = s.Substring(t1, t2 - t1 + 1)   '{から}までを切り出す 
            s = s.Replace(ss, "")               '{から}の文字を空白に置き換える 
        End If

        '\cf0:黒 \cf1:タグ内の色(青) \cf2:「<」と「>」(赤) \cf3:コメントタグの色(緑) 

        s = Replace(s, "\viewkind""{\colortbl ;\red255\green0\blue0;\red0\green0\blue255;\red0\green150\blue0;}" & vbCrLf & "\viewkind")
        s = Regex.Replace(s, "<(.*?)>""\cf2<\cf1$1\cf2>\cf0", RegexOptions.IgnoreCase)
        s = Regex.Replace(s, "<\\cf1!(.*?)\\cf2>""\cf3<!$1>\cf0", RegexOptions.IgnoreCase)
        RithTextBox1.Rtf = s


のような感じで、Rtfプロパティをいじって色を付けています。

このプログラムは http://www.geocities.jp/hatanero/richtext.html を参考に作っています。

正規表現とRtfに詳しい方、回答お願いします。