Регулярные выражения для подсветки слов - 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]))");