RichTextboxでHTMlタグのみ色を変えたいのですが
投稿者 るきお  (社会人)
投稿日時
2010/7/17 20:35:47
こんにちは。
TeraPadはわかりませんので、RichTextBoxで < から始まる文字列の色を変える例を紹介します。
(多分 でも動くとは思います)
ただ、使用目的がhtmlのタグを色分けするということでしたら、これだけでは不十分でもうちょっと工夫が必要と思います。たとえば、 < の後にスペースがあって、そのあとにタグ名がある場合や、</h1>などのような閉じタグが考慮から漏れています。これらの問題は正規表現のパターンを変えることで解決できます。
さらに、JavaScriptなどの内部で使用されている < にも反応してしまいます…。この問題は正規表現だけでは解決困難で、プログラムによるhtmlの構造解析が必要になると思います。
さらに、エディタを作られているということであれば、入力中にどんどん色を変えていきたいということだと思いますが、上述の例はすべての入力が完了している状態を前提としており、入力中にリアルタイムで反応するためにはまだ工夫が必要です。
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の構造解析が必要になると思います。
さらに、エディタを作られているということであれば、入力中にどんどん色を変えていきたいということだと思いますが、上述の例はすべての入力が完了している状態を前提としており、入力中にリアルタイムで反応するためにはまだ工夫が必要です。
TeraPadのようにHTMLタグを青色・ダブルクオーテーション(”)を緑色にできたらいいな
と思っておもいついたのは、検索して < で始まる文字を探して、その文字の色を変えようと考えたのですが、どうすればいいんでしょうかorz