2010-12-31 3 views
2

В общем, есть ли быстрый способ сравнить два регулярных выражения и определить, какой из двух является более строгим? То есть, с двумя регулярными выражениями A и B, A является более строгим, чем B, если каждая строка, совпадающая с A, также совпадает с B.Сравнение двух регулярных выражений для строгости?

+0

«Быстрый», вы просите функцию для вычисления строгости регулярности выражения, или вы просите способ оценить их строгость, взглянув на них? –

+0

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

+0

Mechanical Turk :) – ysth

ответ

5

Хотя существуют алгоритмы, позволяющие теоретически использовать эти вещи, применение их к Ruby будет затруднено по нескольким причинам:

  1. Ruby не предоставляет эти функции в качестве встроенных функций, поскольку цель регулярных выражений Ruby заключается в том, чтобы соответствовать тексту, а не выполнять теоретические манипуляции с автоматами конечного состояния.
  2. Ruby не предоставляет внутренности своих регулярных выражений для запуска ваших собственных алгоритмов. (Хотя вы можете использовать inspect, чтобы получить исходную форму регулярного выражения, вам придется самостоятельно проанализировать его, чтобы выполнить любой анализ регулярного выражения.)
  3. Регулярные выражения Ruby не являются «реальными» регулярными выражениями. Благодаря обратным ссылкам, используемым совместно с группами захвата, они могут распознавать надмножество обычных языков (хотя это всего лишь подмножество контекстных свободных языков), поэтому теория не будет полностью соответствовать силе регулярных выражений Ruby.
Смежные вопросы