2013-12-20 3 views
1

Я делаю язык программирования на родном C++, с которым я делаю базовый редактор на C#. NET WinForms. Тем не менее, я использую SyntaxRTB, с которым я хотел бы Regex, чтобы поймать следующее сообщение об ошибке:Regex проверить, если слово сменилось определенными словами

if declare is not succeeded by string/int/float/bool/array/char

Как бы мне это сделать?

(синтаксис для объявления переменной является declare variable_type variable_name) - пробелами должны учитываться тоже)

У меня есть declare(?!string), но я до сих пор путают.

ответ

3

Если вы хотите регулярное выражение, необходим нулевой ширине negative lookahead

Но если вы построение языка, это не путь. Полномасштабные синтаксические анализаторы языка - это разные сущности.

+0

Я согласен (+1). RegEx для анализа исходного кода будет болезненным (IMHO). Парсер, который токенизирует источник, - это то, что должен писать OP. – IAbstract

0

Вы захотите использовать утверждение Lookahead. Честно говоря, я порядочный в Regex, но я не тот парень, которого вы хотите объяснить вам.

This link объяснит это лучше, чем я могу, и this link предоставляет довольно приличный редактор Regex.

1

Хотя я согласен с @fejesjoco, это выражение, которое я использовал here:
(declare)[\s](int|string|float|bool|array|char)[\s](.*)

image showing declare groups

Проверка на !match(pattern) для дальнейшей диагностики проблемы.

+0

+1 если вы можете сказать мне, как отменить этот шаблон: чтобы получить все предметы, которые не соответствуют правилу – user2976089

+0

Вы должны быть более конкретными; выражение не соответствует приведенным ниже примерам: 'declare boo baz'; 'declareint foo'; 'declare foo int' – IAbstract

+0

Как в тех, которые не' объявляют int me' 'объявляют строку foo' – user2976089

Смежные вопросы