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

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

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

投稿者 るきお  (社会人) 投稿日時 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の構造解析が必要になると思います。


さらに、エディタを作られているということであれば、入力中にどんどん色を変えていきたいということだと思いますが、上述の例はすべての入力が完了している状態を前提としており、入力中にリアルタイムで反応するためにはまだ工夫が必要です。
投稿者 winvis  (学生) 投稿日時 2010/7/17 19:22:34
現在、RichTextBoxを使って、テキストエディタを使っているのですが
TeraPadのようにHTMLタグを青色・ダブルクオーテーション(”)を緑色にできたらいいな
と思っておもいついたのは、検索して < で始まる文字を探して、その文字の色を変えようと考えたのですが、どうすればいいんでしょうかorz