Регулярные выражения для подсветки слов - C#
Формулировка задачи:
Моя задача заключается в том, чтобы разработать редактор кода.
Подзадачей, которую я хочу здесь обсудить является подсветка синтаксиса, а еще конкретней: нахождение специальных слов с помощью регулярных выражений.
Необходимо, чтобы при нажатии на кнопку (пока что так) спец слова в тексте подсвечивались синим цветом. Текст записан в RichTextBox.
Спец словами являются:
@ЕСЛИ
@ТО
@ВСЕ;
@ДЛЯ
@ИЗ
@ИЛИ
@И
@ИНАЧЕ
@>
@<
@>=
@<=
@!=
@=
::
Моей первоначальной задачей было создание синтаксиса языка, поэтому такие уж специфичные (странные) слова.
Написала вот такой код:
Проблема: Слова @ЕСЛИ @ТО @ДЛЯ @ИЗ @ИЛИ @И @ИНАЧЕ находятся нормально. Но остальное не выделяется. Я так понимаю дело в том, что в конце не буква и не цифра. Что с этим делать, я не знаю.
Я почитала несколько сайтов про регулярные выражения, где было сказано, что \bJava\b будет найдено в "Java" и не будет найдено в "JavaScript", такого результата собственно я и добиваюсь. Но я не ставлю \b в начале слов, потому что тогда, вообще ничего не подсвечивается...
P.S. пример использования моих спец слов:
@ДЛЯ содержание @ИЗ С.Человек.Атрибуты ::
a = содержание; @ВСЕ;
@ЕСЛИ (<<C.Животное.Название>> @= Кошка)
@ТО create table <<C.Животное.Название>> (id INTEGER primary key) @ИНАЧЕ create table
<<C.Животное.Название>> (<<C.Животное.Порода>> varchar(20), id INTEGER primary key) @ВСЕ;
@= 5 @ИЛИ @> 6 @И @< 9
Ну это так, пример...
using System; using System.Data; using System.Drawing; using System.Linq; using System.Text.RegularExpressions; using System.Windows.Forms; namespace TestSelectionText { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Colorise() { var currentSelStart = richTextBox1.SelectionStart; var currentSelLength = richTextBox1.SelectionLength; var matches = Regex.Matches(richTextBox1.Text, @"@ЕСЛИ\b|@ТО\b|@ВСЕ;\b|@ДЛЯ\b|@ИЗ\b|@ИЛИ\b|@И\b|@ИНАЧЕ\b|@>\b|@<\b|@>=\b|@!=\b|\b::\b|@<=\b|@=\b"); foreach (var match in matches.Cast<Match>()) { richTextBox1.Select(match.Index, match.Length); richTextBox1.SelectionColor = Color.Blue; } } private void button1_Click(object sender, EventArgs e) { Colorise(); } } }
Решение задачи: «Регулярные выражения для подсветки слов»
textual
Листинг программы
var matches = Regex.Matches(richTextBox1.Text, @"(\B@ЕСЛИ\b|\B@ТО\b|\B@ВСЕ;(?=[^\w\d\b])|\B@ДЛЯ\b|\B@ИЗ\b|\B@ИЛИ\b|\B@И\b|\B@ИНАЧЕ\b|\B@>(?=[^\w\d\b])|\B@<(?=[^\w\d\b])|\B@>=(?=[^\w\d\b])|\B@<=(?=[^\w\d\b])|\B@!=(?=[^\w\d\b])|\B@=(?=[^\w\d\b]))");
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д