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

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

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

Моя задача заключается в том, чтобы разработать редактор кода. Подзадачей, которую я хочу здесь обсудить является подсветка синтаксиса, а еще конкретней: нахождение специальных слов с помощью регулярных выражений. Необходимо, чтобы при нажатии на кнопку (пока что так) спец слова в тексте подсвечивались синим цветом. Текст записан в RichTextBox. Спец словами являются: @ЕСЛИ @ТО @ВСЕ; @ДЛЯ @ИЗ @ИЛИ @И @ИНАЧЕ @> @< @>= @<= @!= @= :: Моей первоначальной задачей было создание синтаксиса языка, поэтому такие уж специфичные (странные) слова. Написала вот такой код:
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();
        }
    }
}
Проблема: Слова @ЕСЛИ @ТО @ДЛЯ @ИЗ @ИЛИ @И @ИНАЧЕ находятся нормально. Но остальное не выделяется. Я так понимаю дело в том, что в конце не буква и не цифра. Что с этим делать, я не знаю. Я почитала несколько сайтов про регулярные выражения, где было сказано, что \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
Листинг программы
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
Похожие ответы