Особенности, общие для всех вкусов регулярных выражений? - PullRequest
9 голосов
/ 27 августа 2008

Я видел много общего в возможностях регулярных выражений различных инструментов / языков с поддержкой регулярных выражений (например, perl, sed, java, vim и т. Д.), Но у меня также есть много отличий.

Существует ли стандартное подмножество возможностей регулярных выражений, которое поддерживаются всеми инструментами / языками с поддержкой регулярных выражений? Как возможности регулярных выражений различаются в разных инструментах / языках?

Ответы [ 6 ]

12 голосов
/ 27 августа 2008

Сравнить регулярные выражения вкусов

http://www.regular -expressions.info / refflavors.html

12 голосов
/ 27 августа 2008
1 голос
/ 27 августа 2008

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

  1. Классы персонажей / Наборы и их отрицание - []
  2. Якоря - ^ $
  3. Чередование - |
  4. Квантификаторы -? + * {N, m}
  5. Метасимволы - \ w, \ s, \ d, ...
  6. Обратные ссылки - \ 1, \ 2, ...
  7. Точка -.
  8. Простые модификаторы, такие как / g и / i для глобального и игнорирования регистра
  9. Спасающиеся персонажи

Более продвинутые инструменты / поддержка языков:

  1. Взгляды и спины
  2. Классы символов POSIX
  3. Границы слова
  4. Inline Переключает, например, разрешает регистронезависимость только для небольшой части регулярного выражения
  5. Модификаторы, такие как / x, для дополнительного форматирования и комментариев, / m для многострочного
  6. Именованные захваты
  7. Unicode
1 голос
/ 27 августа 2008

Если вы взяли грамматику grep regexp, а не egrep, или грамматику sed regexp и использовали, что вы должны использовать безопасное подмножество на многих платформах и инструментах.

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

Реализации на основе FSA найдут самое длинное совпадение, начиная с первой возможной позиции. Отступающие найдут смещенный влево первый матч, начиная с первой возможной позиции. То есть он будет пробовать каждую ветку в порядке в шаблоне, пока не будет найдено совпадение.

Рассмотрим строку "xyxyxyzz" и шаблон "(xy)*(xyz)?". Двигатели на основе FSA будут соответствовать самой длинной из возможных подстрок, "xyxyxyz". Механизмы на основе обратного слежения будут соответствовать первой подстроке, смещенной влево, "xyxyxy".

0 голосов
/ 18 мая 2009

Смотрите синтаксис регулярного выражения в emacs: http://www.gnu.org/software/emacs/manual/html_node/emacs/Regexps.html#Regexps.

Я помню, что читал, что синтаксис emacs установлен в камне (по причинам обратной совместимости), поэтому, если вы хотите быть совместимым с everything , сделайте все совместимым с этим. Некоторые инструменты могут поддерживать его, другие - нет.

Несмотря на то, что у вас есть достойная цель, я думаю, что ее будет чрезвычайно трудно достичь, и я также нашел, что регулярные выражения emacs трудны для работы. Может быть, 99% всего достаточно, если оно делает вас счастливее и продуктивнее?

0 голосов
/ 27 августа 2008

Там нет стандартного двигателя. Тем не менее, формат расширенных регулярных выражений POSIX является допустимым подмножеством большинства движков и, вероятно, настолько близок к стандартному подмножеству.

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