Если вы имеете дело с системой регулярных выражений, эквивалентной формальным регулярным выражениям (которые описывают регулярные языки; без подсчета, без ретроспективного просмотра, без сопоставления пар скобок и т. д.), ИЛИ если вы будете иметь дело только с регулярными выражениями, которые используют эти функции (несмотря на то, что ваша система регулярных выражений способна описывать нерегулярные языки), тогда существует точное понятие сложности (или, по крайней мере, вы можете его вывести), и есть определенный смысл, в котором регулярные выражения могут быть «минимизированы».
По теореме Майхилла-Нероде все регулярные языки имеют конечное число классов эквивалентности при отношении неразличимости строк. Эти классы эквивалентности непосредственно соответствуют состояниям в минимальном детерминированном конечном автомате для регулярного языка. Вы можете принять количество состояний минимального детерминированного конечного автомата для языка как «фундаментальную» сложность самого языка.
Существуют алгоритмы, которые могут привести вас от (формального) регулярного выражения к минимальному детерминированному конечному автомату, а затем обратно к регулярному выражению. Это должно дать вам каноническое регулярное выражение для каждого регулярного языка. Я предполагаю - но не разработал доказательство - что процесс создания регулярного выражения из минимального детерминированного конечного автомата может быть изменен так, чтобы он производил возможное сокращенное (с точки зрения количества операций) регулярное выражение.
Сложностью языка может быть количество операций в таком каноническом регулярном выражении. Фактическая сложность любого данного регулярного выражения может быть количеством операций в нем. Соотношение может дать вам представление о том, насколько «неэффективно» или «излишне сложно» ваше регулярное выражение.
Если вам действительно нужны нестандартные функции регулярного выражения, то вам не повезло; в языковых классах более высокого порядка нет понятия вычислимой минимизации. Вы можете целыми днями изобретать метрики сложности, но вы никогда не получите общего алгоритмического ответа на вопрос «насколько это неэффективно по сравнению с базовым планом?» Другой способ выразить то, что я имею в виду, таков: сделать торт может быть сложнее, чем сделать попкорн, но если вам нужен торт, вы должны приложить дополнительные усилия, чтобы получить то, что вам нужно.
person
Patrick87
schedule
18.02.2019
((x*)*)*
(вложенные количественные шаблоны), он сложный. - person revo   schedule 14.02.2019