Могу ли я безопасно использовать расширенные регулярные выражения все время, а не основные? - PullRequest
1 голос
/ 18 апреля 2010

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

Ответы [ 3 ]

1 голос
/ 18 апреля 2010

В зависимости от вашей среды и аудитории.

BRE становятся все более редкими, и я думаю, что на данный момент ERE поддерживает больше инструментов, чем BRE. Even grep (вариант GNU) теперь ERE по умолчанию.

Большая часть того, что называется BRE, на самом деле не BRE. Если у вас есть какой-либо из этих функционалов в качестве метасимволов: | + ?, тогда ваш BRE действительно ЕРЕ с экранированием BRE.

Я думаю, что BRE является исключением, и его следует избегать, если в вашей среде нет чего-то, что требует этого.

1 голос
/ 18 апреля 2010

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

0 голосов
/ 18 апреля 2010

Я не думаю, что "BRE vs. ERE" - это очень полезное различие в наши дни. Есть еще много инструментов, основанных на ERE, таких как awk и gnu grep, а также поддержка регулярных выражений в базах данных, таких как MySQL и Oracle, но BRE - это практически сноска.

Более того, возможности regex, встроенные в большинство современных языков программирования, выходят далеко за рамки ERE с точки зрения возможностей. Даже JavaScript, наименее мощный из всех, поддерживает группы без захвата, неохотные квантификаторы и средства прогнозирования. Вероятно, было бы более полезно классифицировать вкусы регулярных выражений как «ERE vs. ECMA +», но это намного больше, чем это.

Если вы программируете на Tcl, вы используете \y и \m для соответствия границ слова; в JavaScript вы учитесь любить [\s\S], потому что нет режима точка-совпадение-новая строка; в Visual Studio вы используете @ и # вместо *? и +? для минимального соответствия. И хотя Java имеет совершенно современный вид регулярных выражений, в ней нет литералов регулярных выражений и неточечных / буквальных / дословных строковых обозначений, поэтому вы все равно ослепнете, глядя на все обратные косые черты.

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


ref: Таблица сравнения вкусов

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