13

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

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

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

1 ответ1

19

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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .