Сравнивая два регулярных выражения для строгости? - PullRequest
2 голосов
/ 31 декабря 2010

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

1 Ответ

5 голосов
/ 31 декабря 2010

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

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