2015-10-30 4 views
0

В моих последних вещах, чтобы сделать, я застрял в выяснении регулярного выражения для зарезервированных слов, как IF(foo, bar), ELSE, ENDIFRegex для обнаружения слов + скобки

Так что должно быть точным регулярным выражение для таких вещей, как:»

IF(?a , <, 4) // do some things 

ELSE // do some things 

т.д.

мне нужно, чтобы быть в состоянии найти слова в начале строки, и она должна быть в состоянии обнаружить те только положить в начале, таким образом, не должны быть включены строки, как это:

//somethings are done here then IF(foo, bar) 

Я пытался в http://www.regexr.com/ использовать: /^IF\((\w)\)/ для поиска для IF() в строках, но не в состоянии обнаружить строку IF(). Что-то не так с выражением?

Спасибо!

+0

Проблема с вашим регулярным выражением заключается в том, что '\ w' ожидает хотя бы одно слово, поэтому вам, вероятно, следует попробовать' \ w? ', Что сделает слово необязательным. Вы пытаетесь создать какой-то механизм шаблонов здесь? Может быть, было бы лучше использовать что-то существующее для этого ... –

+0

своего рода механизм формулы, который будет анализировать данную формулу пользователем. Я использовал^IF \ ((. *) \) \: Вместо этого и добавил разделители, чтобы игнорировать дополнительные шаблоны IF() –

+1

Ну, может быть, вы могли бы использовать существующий интерпретатор скриптов для этого и просто вставить в него вход пользователя. В зависимости от вашего варианта использования, но делать калькулятор формулы с регулярным выражением, вероятно, будет сложно. –

ответ

0

Обратите внимание, что в общем случае эта проблема не подходит для регулярного выражения из-за вложенных круглых скобок и других элементов кода.

Если ваши строки просты, вы можете попробовать IF[^)]*\).

Это регулярное выражение будет выбирать IF и любые символы, которые не являются правильной скобкой до первой правой скобки. Однако он будет терпеть неудачу, если у вас есть вложенные круглые скобки.

Если ваша реализация регулярных выражений поддерживает нулевую длину предпросмотра вы можете попробовать это:

IF.*\)(?=[^)]*$) 

Это выбрать IF и все символы вплоть до последней правой скобки на строке. Однако это тоже не удастся, если у вас есть скобка в комментарии, например.

0

Вместо этого я использовал /^IF\((.*)\)\:/ и добавил разделители, чтобы игнорировать дополнительные шаблоны IF(). Я также добавил явно поиск начала строки, а не в середине строки, чтобы избежать второго случая. Я также буду придерживаться той же схемы для других дел, которые мне нужны.

Спасибо!

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