Я пытаюсь написать регулярное выражение в C#, которое будет соответствовать блокам PL/SQL, где есть outermostEND;
без обратной косой черты, поскольку это приводит к выходу сценариев тихо в этот момент при запуске с SQLPlus.Согласование только внешних блоков с регулярным выражением
Так, например, это должно вызвать регулярное выражение:
BEGIN
END;
и это должно не триггер это:
BEGIN
END;
/
Но вложенная BEGIN
... END
блоки не нужна косая черта, поэтому следующее должно быть не быть совпадением:
BEGIN
BEGIN
END;
-- no trailing slash here, and that's fine
END;
/
Чувствуется, что балансирующие группы должны быть в состоянии справиться с этим. Я хочу соответствовать «END»; если за ним не следуют дополнительные пробелы и косая черта, а только для самого внешнего блока.
Я пробовал некоторые вариации на следующем, но это не совсем там:
var trigger = new Regex(
@"(?<keyword>BEGIN).*?(?<-keyword>END;)(?(keyword)(\s*/))",
RegexOptions.Singleline | RegexOptions.IgnoreCase
);
Я нашел много примеров, показывающих, как найти несбалансированные скобки, но ни что не пытаются ограничить шаблоны только точки, где начальный и конечный теги являются сбалансированным.
Является ли то, что я пытаюсь сделать с помощью регулярного выражения?
Чтобы быть ясным, в вашем последнем примере вы хотите соответствовать самому внутреннему BEGIN/END или нет? –
@CasimiretHippolyte No. С тремя примерами я хочу, чтобы IsMatch() был истинным для первого, а false для остальных. –
Также стоит отметить, что в последовательности может быть несколько внешних блоков. Я хочу, чтобы регулярное выражение соответствовало, если кому-либо из них не хватает косой черты. –