Функции, общие для всех вариантов регулярных выражений?

StackOverflow https://stackoverflow.com/questions/30026

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

Сравните варианты регулярных выражений

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

Другие советы

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

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top