Жадное совпадение регулярных выражений на основе строки

1) Я пытаюсь сопоставить полные части строки с регулярным выражением. Думаю, здесь проблема с жадностью. Ниже рассматривается структура pl / sql.

ERRORHANDLER
WHEN TRUE THEN
    IF SOMETHING THEN
     ELSE
    END IF;
WHEN FALSE THEN
END;

Ниже приводится регулярное выражение, которое я создал для соответствия ^ (\ s *) ERRORHANDLER ((?! FUNCTION).) END [(\ s) (\ w +) |;]

Где ,

^(\s*)ERRORHANDLER- для соответствия случайным пробелам и статической строке ERRORHANDLER, которая всегда будет началом шаблона.

((?!FUNCTION).)* - негативный взгляд вперёд с жадным *

END[(\s*)(\w+)|;] - для соответствия END вместе с необязательной строкой, заканчивающейся точкой с запятой.

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

Ожидаемый результат:

полное совпадение для

ERRORHANDLER
WHEN TRUE THEN
    IF SOMETHING THEN
     ELSE
    END IF;
WHEN FALSE THEN
END;

person shan    schedule 01.11.2018    source источник


Ответы (1)


так как здесь начало и конец основаны на словах, требуется использование границы, а ниже 2 включены,

  • начальные и конечные слова.
  • между ними количественная оценка с характером и метасимволом.

поэтому для вопроса это регулярное выражение будет соответствовать \ bERRORHANDLER [\ w | \ W] + END \ b;

person shan    schedule 01.11.2018