Реализовать функцию сравнения с простым набором регулярных выражений и программу поиска вхождений соотв. выражений в файле или входном потоке (упрощенный аналог grep
).
Минимальный набор регулярных выражений для реализации:
Одиночный символ:
c
— присутствует c -- конкретный символ набора ASCII[a-z]
— любой символ из диапазона символов (здесь от "a" до "z")[abd]
— присутствует любой символ из списка (здесь a, b, d)[^abe]
— не является ни одним из символов списка (a, b, e).
— любой символПоследовательность символов:
*
— предыдущий одиночный символ символ повторяется любое число раз (или ни разу)+
— предыдущий одиночный символ символ повторяется один или больше раз?
— предыдущий одиночный символ символ повторяется один раз или ни разуОграничители:
^
— начало строки$
— конец строкиДля использования "служебных" символов (\[.+*?$^\]
) в виде "конкретного символа" перед ними нужно поставить символ исключения \
, то же самое касается самого символа \
.
Реализация других выражения из POSIX набора ({m,n}
,\>
,|<
и проч.) приветствуется, но не обязательна.
Программа поиска ищет в файле/потоке строки, соответствующие рег. выражению и выводит их целиком с номером строки в файле (в потоке).
Пример:
abc
соответствуют строки "abcd", "cabcab",выражению ^abc
-- только первая "abcd".
выражению [a-z]a+
соответствуют строки "zaaaaaaaaaaaaa", "rkbaa"
выражению ^ +if[ ]*([^)]+)[ ]*{$
соответствуют:
" if(a) {", " if ( !x ){". При этом строка " if ( !(x) ){" не соответствует.