2013-11-09 3 views
1

Я своего рода новичок в Regex, я создал Regex для сопоставления номера, эксплуатации и идентификатор, но я не мог управлять, как распознать следующий маркер является язык ключевых слов, например, как:Regex: Я не могу создать Regex для соответствия ключевых слов?

int or double or public ......

Вот мой код:

enum TokenType{ 
NUMBER("-?[0-9]+.[0-9]+|-?[0-9]+"),  //int and double 
OPERATION("[*|/|+|-]"),     // arithmetic operations 
WHITESPACE("[ \t\f\r\n]+"),   // white space 
IDENTI("[_]*[A-Za-z][A-Za-z0-9]*[[_]*[A-Za-z0-9]*]*"),// string like _string_string_.. 
//...... 

Проблема здесь каждое ключевое слово как int будет идентификатором, например, если мы имеем

public static int NUMBER_OF_STUDENT;

Выход:

общественное Идентификаторы
статического Identi
INT Identi
NUM ... Идентификаторы
........

Как создать другое регулярное выражение, чтобы соответствовать некоторым ключевым словам, как int, double, ....?


При необходимости, я опубликую полный код этой программы.

+2

Ну, я думаю, вам просто нужно сопоставить ключевые слова перед сопоставлением идентификаторов. Все, что остается, является идентификатором. Само регулярное выражение должно быть таким же простым, как '\ b (int | double | boolean | ...) \ b' –

+0

@JohannesH. : Я пробовал это, но он тоже не работает. –

+0

@ JohannesH. Теперь это работает :) спасибо –

ответ

0

Ваш рисунок должен быть:

"(int|double|public|...and so on)" 

ничего фантазии

+0

Да, только простая вещь, подобная этому, сводит меня с ума. Спасибо :) –

0
(?!int)(?!double)([a-z0-9]+) 

будет соответствовать ntblah и itblah и dblah но не intblah и doubleblah

(?! ИНТ) говорит DonT матч все, что начинается с int. Это будет регулярное выражение для вашего идентификатора, просто используйте этот синтаксис, чтобы исключить все ваши ключевые слова.

+1

и мне нужно, чтобы в какой части регулярных выражений? –

+0

это в дополнение к ответу Артура @ Caffè, для чего вы это используете? – thermite

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