Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабы СПО / РегЭкспы методичка.docx
Скачиваний:
54
Добавлен:
12.04.2015
Размер:
254.09 Кб
Скачать

Варианты заданий

  1. Проверить на корректность формата введенное пользователем десятичное число со знаком или без. Число вводится в формате с фиксированной запятой: целая и дробная части разделяются точкой или запятой.

  2. Проверить на корректность формата введенное пользователем вещественное десятичное число со знаком или без, записанное в экспоненциальной форме (например, 1.5e+2).

  3. Проверить на корректность формата введенное пользователем 16-ричное число. Символы должны быть нечувствительны к регистру. Если число начинается с буквы, перед ней обязательно должен стоять ноль (вместо «FF» пишется «0FF»).

  4. Проверить на корректность формата введенный адрес e-mail.

  5. Проверить на корректность введенный IP-адрес (от 0.0.0.0 до 255.255.255.255).

  6. Пользователь вводит время в формате час:мин:сек. Используя только средства регулярных выражений, проверить корректность введенных данных (часы от 0 до 23, минуты и секунды от 0 до 59).

  7. Разделить URL на составные части: протокол (например, http), имя сайта, путь к каталогу на сайте, имя файла. Вывести на экран по частям. Учтите, что некоторые части могут отсутствовать.

  8. Пользователь вводит полный путь к файлу на диске. Разделить путь на составляющие: имя диска, путь к каталогу, имя и расширение файла; вывести по частям. Учтите, что некоторые части могут отсутствовать.

  9. Проверить на корректность формата данные, вводимые пользователем: Фамилия, имя и отчество в одной строке разделенные пробелами; дата рождения в формате дд.мм.гггг; серия и номер паспорта РФ; номер сотового телефона; номер городского телефона, включая код межгорода.

  10. Из произвольного HTML-файла вытащить все ссылки (тэги <a href=…> и <img>), вывести на экран без повторов.

  11. Задан произвольный HTML файл. Пользователь вводит название любого HTML тэга (например, «а», или «h1»). Нужно вывести на экран номера строк, где эти теги встречаются, и сами строки (при возможности подсветив искомые теги).

  12. Из произвольного файла HTML вытащить все e-mail адреса, встречающиеся в ссылках <a href=”mailto:адрес”>…</a> (для простоты будем считать, что e-mail адреса записываются по одному).

  13. Из произвольного HTML-файла удалить незначащие пробельные символы (код HTML записывается в одну длинную строку).

  14. Задана последовательность цифр (например “908120672390452076559205750102…”), которая интерпретируется как записанные подряд, без пробелов, 10-значные номера сотовых телефонов. С помощью регулярных выражений выделить номера телефонов, которые начинаются с 4-х введенных пользователем цифр.

  15. Предыдущая задача упрощается: цифр три, и они заданы жёстко в программе.

  16. Из текста программы на произвольном языке программирования удалить все комментарии.

  17. Форматирование текста. Задан произвольный текстовый файл. Требуется отформатировать текст: удалить пробельные символы (пробелы, табуляцию) в начале и конце каждой строки.

  18. Задан произвольный файл TXT. Из текста исключить повторяющиеся слова – результаты опечаток: если два одинаковых слова идут подряд, оставить одно из них. Учесть возможные отличия в регистре слов («…Для для…»), различное количество пропусков между словами (пробелов, табуляций, символов перевода строки).

  19. Задан текстовый файл, где в тексте встречаются пути к файлам (в виде «ИмяДиска:\\ПутьКФайлу\ИмяФайла» или «ПутьКФайлу\ИмяФайла»). Требуется скопировать перечисленные файлы в текущий каталог.

  20. Задан текстовый файл, в каждой строке которого записан полный путь к файлу (в формате «ИмяДиска:\\ПутьКФайлу\ИмяФайла» или «ПутьКФайлу\ИмяФайла»), пользователь задает путь к каталогу. Требуется создать командный BAT-файл, в каждой строке которого разместить команду перемещения исходного файла в требуемый каталог (команда MS-DOS MOVEсм. www.itt-essen.com ).

  21. Преобразование текстового файла в формат HTML. Задается имя файла TXT и файла HTML. Требуется сформатировать текст с использованием тегов HTML: 1) каждый абзац заключить в теги <p>…</p>. Абзацы разделяются пустой строкой. Пробелы в начале и конце каждой строки удалять. 2) текст, отделенный двумя пустыми строками, считать за заголовок и заключать в теги <h2>..</h2>. 3)URL-ы превратить в ссылки, используя теги <a href=”…”>…</a>. 4) E-mail адреса превратить в ссылки, используя тег <a href=”mailto:…”>…</a>.

  22. Поиск и замена. Задан произвольный текстовый файл; строка, которую нужно найти; и строка, на которую нужно ее заменить. Заменить (с учетом регистра) текст в файле.

  23. Подстановка текста в шаблон. Имеется текстовый файл (шаблон), содержащий в тексте теги (=ИмяТэга=) – места, куда подставляются пользовательские данные. Например:

Уважаемый =NAME= =SURNAME=!

Извещаем, что за прошедший месяц на ваш счет № =NUMBER= начислено =AMOUNT= рублей.

И имеется текстовый файл с данными, которые следует подставить, например:

Name:Иван

Surname:Иванович

Number:12345

Amount:160,70

Name:Валентина

Surname:Дмитриевна

Number:30865

Amount:88,00

... и т.д.

Блоки данных разделяются пустой строкой.

Нужно сформировать новый текстовый файл, состоящий из нескольких страниц (код символа «разрыв страницы» – 12). На каждой странице помещается текст шаблона с подставленными вместо тэгов данными.

  1. Облегченный вариант предыдущего задания: сам шаблон и данные для постановки задаются не в файлах, а в самой программе в виде константных текстовых строк. Подстановку нужно делать ровно 1 раз. Результат вывести на экран.

  2. Из текста программы на произвольном языке программирования удалить определения всех не используемых констант.

  3. Из текста программы на произвольном языке программирования удалить определения всех не используемых функций и процедур.

  4. Из текста программы на произвольном языке программирования удалить определения всех не используемых классов.

  5. Разбор данных в формате CSV (см. http://ru.wikipedia.org/wiki/CSV). Результаты поместить массив (вроде как для дальнейшей работы), и вывести на экран (для проверки).

И в заключение, приводим текст регулярного выражения на Perl, предназначенного для анализа e-mail адреса согласно стандарту Интернета RFC 822 (описание стандарта http://tools.ietf.org/html/rfc822)

(взято отсюда: http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html)

(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]

)+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:

\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(

?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[

\t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\0

31]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\

](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+

(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:

(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z

|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)

?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\

r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[

\t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)

?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t]

)*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[

\t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*

)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]

)+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)

*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+

|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r

\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:

\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t

]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031

]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](

?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?

:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?

:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?

:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?

[ \t]))*"(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\]

\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|

\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>

@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"

(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t]

)*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\

".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?

:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[

\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-

\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(

?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;

:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([

^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\"

.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\

]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\

[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\

r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\]

\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]

|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \0

00-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\

.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,

;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?

:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*

(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".

\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[

^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]

]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)(?:,\s*(

?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\

".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(

?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[

\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t

])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t

])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?

:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|

\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:

[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\

]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)

?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["

()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)

?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>

@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[

\t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,

;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t]

)*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\

".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?

(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".

\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:

\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[

"()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])

*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])

+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\

.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z

|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(

?:\r\n)?[ \t])*))*)?;\s*)

Еще один образчик регулярных выражений: программа на Perl, удаляющая из текста повторяющиеся слова (когда два одинаковых слова идут подряд) (взято из [1] с.55)

1 автор – программист Андрей Сорокин (г. Санкт-Петербург).

2 2 используются текущие языковые настройки операционной системы (кодовые страницы). В кодовой странице Win1251 буква «Ё» имеет код 168, и не входит в диапазон А–Я (коды 192–223). То же касается буквы «ё» (код 184), которая не входит в диапазон а–я (коды 224–255). Поэтому модификатор {?i} не работает с буквами «ёЁ».

Соседние файлы в папке Лабы СПО