2008-08-27 4 views
9

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

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

ответ

1

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

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

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

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

+0

«автомагистрали без конечных решений». Мой компьютер имеет ограниченную память; как он держит бесконечную $ THING? Я думаю, вы могли бы обозначить s/конечный/детерминированный/g. – 2009-05-18 13:44:26

1

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

  1. Классы символов/Наборы и их Отрицание - []
  2. Якоря -^$
  3. Чередование - |
  4. Кванторы -? + * {П, т}
  5. Метасимволы - \ ш, \ с, \ д, ...
  6. обратные ссылки - \ 1, \ 2, ...
  7. Дот -.
  8. Простые модификаторы, такие как/г и/я для глобальных и игнорируемых случае
  9. Экранирование Персонажи

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

  1. Lookaheads и задом
  2. POSIX символьные классы
  3. Границы слов
  4. Встроенные переключатели, такие как разрешение корпуса inse nsitivity только для небольшой части регулярного выражения
  5. Модификаторы как/х, чтобы дополнительное форматирование и комментарии,/м для многострочного
  6. Названный Захватывает
  7. Unicode
+2

Некоторые простые реализации (например, в Scintilla/SciTE) даже не поддерживают чередование или некоторые кванторы (? И {}). – PhiLho 2008-12-12 16:43:13

0

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

0

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

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

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

Смежные вопросы