Чому існує стільки варіантів регулярних виразів? [зачинено]


14

Сьогодні, коли я переглянув вихідний код нашого проекту, виявив, що в кінці кожного рядка є багато непотрібних "пробілів" та "вкладок". Тому я вирішив видалити їх регулярним виразом.

Однак я виявив, що команда sed -i '/\s+$/d'не працює. Поки я не змінив команду на see -ri '/\s+$/d'це, це діяло як моє сподівання. З посібника sed, він сказав, що -rпосилається на розширений регулярний вираз.

Я розгублений, чому існує стільки варіантів повторного виведення? Як vim / emacs / perl / sed regexp. Чому regexp не може запропонувати унікальний інтерфейс користувача?

Відповіді:


19

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

Однак ви побачите, що в ці дні існують переважно дві групи визначень:

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

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.