Почему так много разных диалектов регулярных выражений? - PullRequest
15 голосов
/ 19 февраля 2010

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

Как это.

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

Я больше ссылаюсь на странные, но небольшие различия, например, когда скобки должны быть экранированы на одном языке, но являются литералами на другом. Или где метасимволы означают несколько разные вещи.

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

Ответы [ 4 ]

10 голосов
/ 19 февраля 2010

Поскольку регулярные выражения имеют только три операции:

  • Конкатенация
  • Союз |
  • Закрытие Клини *

Все остальное является расширением или синтаксическим сахаром и поэтому не имеет источника для стандартизации. Такие вещи, как захват групп, обратные ссылки, классы символов, кардинальные операции и т. Д., Являются дополнениями к первоначальному определению регулярных выражений.

Некоторые из этих расширений делают «регулярные выражения» более не регулярными вообще. Из-за этих дополнительных возможностей они могут выбирать нерегулярные языки, но мы все равно называем их регулярными выражениями.

Когда люди добавляют больше расширений, они часто пытаются использовать другие, распространенные варианты регулярных выражений. Вот почему почти каждый диалект использует X+ для обозначения «один или несколько X», что само по себе является просто ярлыком для написания XX*.

Но когда добавляются новые функции, нет никаких оснований для стандартизации, поэтому кто-то должен что-то придумать. Если более чем одна группа дизайнеров предложит сходные идеи в одно и то же время, у них будут разные диалекты.

3 голосов
/ 19 февраля 2010

По той же причине у нас так много языков. Некоторые люди будут пытаться улучшить свои инструменты, и в то же время другие будут сопротивляться изменениям. C / C ++ / Java / C # кто-нибудь?

1 голос
/ 19 февраля 2010

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

Кроме того, если регулярное выражение само должно быть проанализировано внутри интерпретатора / компилятора с его собственными уникальными правилами, касающимися манипулирования строками, то это может привести к необходимости действовать по-другому в отношении экранирования и литералов.

Хорошая стратегия - это потратить время на то, чтобы понять, как сами алгоритмы регулярных выражений функционируют на более абстрактном уровне, тогда реализация любого конкретного синтаксиса станет намного проще. Подобно тому, как каждый язык программирования имеет свой собственный синтаксис для конструкций, таких как условные операторы и циклы, но все же выполняет ту же абстрактную задачу.

1 голос
/ 19 февраля 2010

Синдром программирования «Я сделал это лучше» производит все эти вещи. То же самое со стандартами. Люди пытаются сделать следующий «лучший» стандарт, чтобы заменить все остальные, и это просто становится чем-то другим, чему мы все должны научиться / разработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...