Регулярные выражения для подсветки слов - C#

Узнай цену своей работы

Формулировка задачи:

Моя задача заключается в том, чтобы разработать редактор кода. Подзадачей, которую я хочу здесь обсудить является подсветка синтаксиса, а еще конкретней: нахождение специальных слов с помощью регулярных выражений. Необходимо, чтобы при нажатии на кнопку (пока что так) спец слова в тексте подсвечивались синим цветом. Текст записан в RichTextBox. Спец словами являются: @ЕСЛИ @ТО @ВСЕ; @ДЛЯ @ИЗ @ИЛИ @И @ИНАЧЕ @> @< @>= @<= @!= @= :: Моей первоначальной задачей было создание синтаксиса языка, поэтому такие уж специфичные (странные) слова. Написала вот такой код:
Листинг программы
  1. using System;
  2. using System.Data;
  3. using System.Drawing;
  4. using System.Linq;
  5. using System.Text.RegularExpressions;
  6. using System.Windows.Forms;
  7. namespace TestSelectionText
  8. {
  9. public partial class Form1 : Form
  10. {
  11. public Form1()
  12. {
  13. InitializeComponent();
  14. }
  15. private void Colorise()
  16. {
  17. var currentSelStart = richTextBox1.SelectionStart;
  18. var currentSelLength = richTextBox1.SelectionLength;
  19. var matches = Regex.Matches(richTextBox1.Text, @"@ЕСЛИ\b|@ТО\b|@ВСЕ;\b|@ДЛЯ\b|@ИЗ\b|@ИЛИ\b|@И\b|@ИНАЧЕ\b|@>\b|@<\b|@>=\b|@!=\b|\b::\b|@<=\b|@=\b");
  20. foreach (var match in matches.Cast<Match>())
  21. {
  22. richTextBox1.Select(match.Index, match.Length);
  23. richTextBox1.SelectionColor = Color.Blue;
  24. }
  25.  
  26. }
  27. private void button1_Click(object sender, EventArgs e)
  28. {
  29. Colorise();
  30. }
  31. }
  32. }
Проблема: Слова @ЕСЛИ @ТО @ДЛЯ @ИЗ @ИЛИ @И @ИНАЧЕ находятся нормально. Но остальное не выделяется. Я так понимаю дело в том, что в конце не буква и не цифра. Что с этим делать, я не знаю. Я почитала несколько сайтов про регулярные выражения, где было сказано, что \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 Ну это так, пример...

Решение задачи: «Регулярные выражения для подсветки слов»

textual
Листинг программы
  1. 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]))");

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.25 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы