Подтвердить что ты не робот

Почему существует так много разных диалектов регулярных выражений?

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

Как и эти.

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

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

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