У меня есть строка, представляющая оператор уравнения: a = b * c
в инструменте, который я пишу.
Строка может содержать суффикс «комментарий» к оператору, где *
представляет комментарий.
Я использую AvalonEdit для объекта текстового редактора и пытаюсь написать правильное определение файла XSHD, чтобы оно соответствовало обнаружению строки комментария для выделения.
Я не уверен, что это можно обнаружить с помощью регулярного выражения, поскольку *
char имеет два значения в зависимости от контекста его использования.
E.g.,
a = b * c
:*
— это символ умножения совпадения, который не сигнализирует о комментарии (без выделения комментариев)abcdef abcd * a comment
: Здесь*
— это символ комментария, а строкаa comment
должна быть выделена как комментарий.a = b * c * a comment
: здесь первый*
— это оператор сопоставления, а второй — символ комментария... поэтому строкаa comment
должна быть выделена как комментарий
Я попробовал следующие определения для обнаружения комментариев в файле XSHD:
<Span color="Comment" begin="\*" end="\n" />
Это явно решает 2-й пример... но он ошибочно установит c
в качестве комментария в примере 1.
Затем я попробовал <Span color="Comment" begin="^(?!.*=.*\*).*?\*.*" end="\n" />
, использовал подход с отрицательным прогнозом для решения примера 1, но затем он фиксирует всю строку как комментарий к примеру 2.
Оба определения не могут обнаружить сценарий примера 3.
Мне интересно, не может ли моя проблема быть решена регулярным выражением (как требует XSHD), поскольку *
используется в двух разных значениях.
Я использую AvalonEdit 5.0.4.
Есть ли решение?
a = b*c * a comment
, поэтому последний*
является символом комментария, а первый - математическим оператором. два оператора умножения в одной строке не поддерживаются, поэтомуa=b*c*a
(b умножить на c, умноженное на a) не поддерживается в любом случае - person NirMH   schedule 19.09.2019