RichTextboxでHTMlタグのみ色を変えたいのですが

タグの編集
投稿者 winvis  (学生) 投稿日時 2010/7/17 19:22:34
現在、RichTextBoxを使って、テキストエディタを使っているのですが
TeraPadのようにHTMLタグを青色・ダブルクオーテーション(”)を緑色にできたらいいな
と思っておもいついたのは、検索して < で始まる文字を探して、その文字の色を変えようと考えたのですが、どうすればいいんでしょうかorz
投稿者 るきお  (社会人) 投稿日時 2010/7/17 20:35:47
こんにちは。

TeraPadはわかりませんので、RichTextBoxで < から始まる文字列の色を変える例を紹介します。

  (多分  でも動くとは思います)
Dim pattern As String = "\<(?<tagName>\w+)"
Dim matches = System.Text.RegularExpressions.Regex.Matches(RichTextBox1.Text, pattern)

For Each match As System.Text.RegularExpressions.Match In matches
    Dim start As Integer = match.Groups("tagName").Index
    Dim length As Integer = match.Groups("tagName").Length
    RichTextBox1.Select(start, length)
    RichTextBox1.SelectionColor = Color.Blue
Next


ただ、使用目的がhtmlのタグを色分けするということでしたら、これだけでは不十分でもうちょっと工夫が必要と思います。たとえば、 < の後にスペースがあって、そのあとにタグ名がある場合や、</h1>などのような閉じタグが考慮から漏れています。これらの問題は正規表現のパターンを変えることで解決できます。
さらに、JavaScriptなどの内部で使用されている < にも反応してしまいます…。この問題は正規表現だけでは解決困難で、プログラムによるhtmlの構造解析が必要になると思います。


さらに、エディタを作られているということであれば、入力中にどんどん色を変えていきたいということだと思いますが、上述の例はすべての入力が完了している状態を前提としており、入力中にリアルタイムで反応するためにはまだ工夫が必要です。