htmlタグの属性を正規表現で抽出
投稿者 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
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
今VBでhtmlのエディタを作成しているのですが、RichTextboxでタグの色を変えるときに正規表現を使用しています。
そこで、ある程度の色付けは実装できるのですが、タグの中まで詳細に色付けすることが今の能力ではできません。
たとえば <input type="checkbox" checked="true" id="test"> とやった時に、「type=」、「checked=」、「id=」 を取り出して赤に色付けし、「"」から「"」までの範囲を緑で色づけしたいときはどのような正規表現を用いるとできますか?
今のところある程度の色付けに関しては
のような感じで、Rtfプロパティをいじって色を付けています。
このプログラムは http://www.geocities.jp/hatanero/richtext.html を参考に作っています。
正規表現とRtfに詳しい方、回答お願いします。