Регулярные выражения

/!\ Лекция - экспромт! /!\

Д/З

  1. Почитать про регулярные выражения
  2. Потренироваться! (обратите внимание на то, что большинство сайтов поддерживают Python или PCRE, или Javascript, но не классические RE).
  3. Написать программу esub с параметрами regexp substitution string, которая работает примерно как echo 'string' | sed -E 's/regexp/substitution/' (однократная замена). Предупреждаю: надо уметь программировать на Си.

    • Используются расширенные регулярные выражения (так меньше «\»)

    • Программа должна распознавать ошибки в регулярном выражении и выводить соответствующую диагностику с помощью regerror

    • В строке substitution программа должна распознавать ссылки на соответствующие «карманы». Также должны распознаваться и ссылки на несуществующие карманы (например, \9 если в выражении нет стольких пар скобок — это ошибка), и конструкция «\\», которая должна заменяться на «\»

      • Следите за количеством этих «\» — оно имеет тенденцию уменьшаться вдвое при каждой обработке, да ещё в разных шеллах работать по-разному, не запутайтесь!

        george@linuxprac:~> /bin/echo 123\456
        123456
        george@linuxprac:~> /bin/echo "123\456"
        123\456
        george@linuxprac:~> /bin/echo "123\\456"
        123\456
        george@linuxprac:~> /bin/echo "123\\\456"
        123\\456
        george@linuxprac:~> /bin/echo "123\\\\456"
        123\\456
        george@linuxprac:~> # а сейчас мерзкий трюк — echo, встроенный в Zsh
        george@linuxprac:~> echo "123\\\\456"
        123\456
        george@linuxprac:~> echo "123\\\\\\\\\\456"
        123\\\456
  4. Написать проект на autotools, cmake или meson, в который включить сборку, удаление генератов и тесты, где вывод esub сравнивается с выводом соответствующей команды sed -E s/…/…/

  5. Создать в каталоге с домашними заданиями подкаталог 08_Regexps и поместить туда проект

LecturesCMC/LinuxApplicationDevelopment2021/08_Regexps (последним исправлял пользователь ArsenyMaslennikov 2021-11-15 22:51:25)