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

14

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

Однако я обнаружил, что команда sed -i '/\s+$/d'не работает. Пока я не изменил команду на see -ri '/\s+$/d', это действовало как мое ожидание. Из руководства sedсказано, что он -rвызывает расширенное регулярное выражение.

Я запутался, почему существует так много вариантов регулярных выражений? Как vim / emacs / perl / sed regexp. Почему регулярное выражение не может предложить уникальный пользовательский интерфейс?

hero2008
источник

Ответы:

19

По историческим причинам. Нет единого определения синтаксиса «Регулярное выражение». Само понятие регулярного выражения не имеет ничего общего с фактическим синтаксисом, который его формально описывает. Люди придумали разные способы сказать одно и то же, отсюда разные стили синтаксиса регулярных выражений.

Однако вы обнаружите, что в эти дни в основном существуют две группы определений:

  1. Регулярные выражения POSIX, которые задают базовые (BRE) и расширенные регулярные выражения (ERE). Путаница начинается тогда, когда, например, базовые регулярные выражения используют\( \)для обозначения группы, а расширенные регулярные выражения используют( )для этого.

  2. Основанные на Perl регулярные выражения . Регулярные выражения Perl определяют более согласованный синтаксис, где, например, обратная косая черта всегда будет выходить за пределы буквенно-цифрового символа. Синтаксис регулярных выражений Perl в наши дни встречается во многих популярных языках программирования, от Java до Ruby.

Вы можете проверить статью Wikipedia о синтаксисе регулярных выражений для получения дополнительной информации.

slhck
источник