Regex жадный матч на основе строки - PullRequest
0 голосов
/ 01 ноября 2018

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;

1 Ответ

0 голосов
/ 01 ноября 2018

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

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

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

...