Главная » Просмотр файлов » regulyarnyie-vyirazheniya-osnovyi

regulyarnyie-vyirazheniya-osnovyi (852744), страница 7

Файл №852744 regulyarnyie-vyirazheniya-osnovyi (Пособие по регуляркам) 7 страницаregulyarnyie-vyirazheniya-osnovyi (852744) страница 72021-10-05СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 7)

Проанализируем, почему так происходит.• Сокращение \Ь находит границу слова, и ему не соответствует никакая буква.• Символы А и Т ограничивают последовательность символов.• Последовательности . { 5 } соответствует последовательность из пяти произволь­ных символов.• Сокращению \Ь соответствует другая граница слова.На самом деле данное регулярное выражение совпало бы как со словом ANCYENT,так и со словом ANCIENT.А теперь сравните результаты, которые получаются в случае использования следую­щего выражения:\b\w{7}\bа также следующего:\Ь ....

... \ЬНаконец, упомяну о поиске соответствий нулю или нескольким произвольным сим­волам с помощью следующей последовательности символов:*которая означает то же самое,что и последовательность[ Л \n]или последовательность[ л \n\r]Аналогичную роль играет и точка с квантификатором +, имеющим смысл "один илиболее раз":.+Апробируйте эти выражения в RegExr, и вы увидите, что каждому из них соответ­ствует только первая строка текста (при снятом флажке global).

Такое поведение обу­словлено тем, что точка, как правило, не совпадает с символами новой строки, такимикак символ "перевод строки" (U+OOOA) или символ "возврат каретки" (U+OOOD). Если жевы установите флажок dotall (точке соответствуют границы строк),то как . *,так и .+выберут весь целевой текст, отображаемый в нижнем поле. (При установленном флажкеdotall точке соответствуют все символы, включая символы новой строки.)Объясняется это тем, что указанные квантификаторы - жадные; иными словами,онипытаются найти совпадение как можно большей длины.

Однако пока что вам не стоитоб этом задумываться. В главе 7 о квантификаторах и их "жадности" будет рассказаноболее подробно.Глава 2. Сопоставление с простыми шаблонами37Разметка текста теrамиПоэма "T he Rime of the Ancient Mariner" - всего лишь простой текст. А что если этоттекст понадобится отобразить в Интернете? Что если вы захотите разметить его как до­кумент HTMLS не вручную, а с использованием регулярных выражений? Как это сделать?Более подробно об этом будет рассказано в последующих главах, тогда как в этой гла­ве мы сделаем лишь первые шаги в этом направлении, чтобы в дальнейшем постепеннодобавлять новую разметку.Щелкните в RegExr на вкладке Replace (Замена), включите многострочный режим,установив флажок multiline (многострочный режим), и введите в верхнем текстовом полетакое выражение:(лТ.*$)Это выражение совпадет с первой строкой поэмы и запомнит ее в качестве содержимого группы, ограниченной круглыми скобками.Далее введите во втором сверху поле следующий текст:<h1>$1</hl>Подстановочное регулярное выражение помещает захваченную группу, представлен­ную переменной $1, в элемент hl.

Результат можно наблюдать в текстовом поле в ниж­ней части окна. В большинстве реализаций, включая Perl, для указанной переменной ис­пользовался бы стиль \1, но приложение RegExr поддерживает только переменные вида$1, $2, $3 и т.д. Больше о группах и обратных ссылках вы узнаете в главе 4.Исnоnьзование редактора sed дnя разметки текстаРазметку текста можно выполнить из командной строки, используя редактор sed. Этопотоковый редактор, способный интерпретировать регулярные выражения и преобразо­вывать текст. Он был разработан в начале 1970-х годов Ли Макмэхоном из Bell Labs. Есливы работаете на компьютере Мае или на компьютере под управлением Linux, значит, этотредактор у вас уже установлен.Испытайте редактор sed, введя в командной строке (например, в окне Terminalна Мае) следующую команду:echo Hello I sed s/Hello/GoodЬye/Вот что должно произойти после этого.• Команда echo выводит слово Hello на стандартное устройство вывода (каковымобычно является экран), но поскольку вслед за командой echo указан символ ка­нала в виде вертикальной черты ( 1 ), вывод будет передан следующей команде, т.е.редактору sed.•Канал перенаправляет вывод команды echo на вход редактора sed.• Затем команда s (substitute) редактора sed заменяет слово Hello словом Goodbye,и это слово выводится на экран.Те читатели, на компьютерах которых редактор sed еще не установлен, могут уста­новить его, следуя приведенными в конце главы указаниям, которые относятся к двумверсиям sed: BSD и GNU.38Глава 2.

Соnоставление с nростыми шаблонамиКогда будете готовы к работе, введите в командной строке следующую команду:sed -n 's/ л / <hl>/;s/$/ < \/hl>/p;q' rime.txtВы должны получить следующий вывод:< hl>THERIМE OF ТНЕ ANCYENT МARINERE, IN SEVEN PARTS. < /hl>Давайте детально проанализируем эту команду.• Строка начинается с вызова программы sed.• Опция -n подавляет автоматический вывод каждой входной строки, заданныйв sed по умолчанию; выводятся только те строки, для которых это явно указанокомандой р. Мы используем эту опцию для того, чтобы отобразить только строку,которая подвергается воздействию регулярного выражения, т.е. строку 1.• Выражение s/ л /<hl>/ помещает открывающий тег hl в начало(\ л) строки.• Точка с запятой(; ) служит для разделения команд.• Выражение s/$/<\/hl>/ помещает закрывающий тег hl в конец($) строки.• Команда р выводит строку, на которую воздействовало регулярное выражение(строка 1).• Наконец, команда q осуществляет выход из программы, поэтому команда sed об­рабатывает только первую строку.• Описанные операции применяются к содержимому файла rime.txt.Ниже показан другой возможный способ написания этой команды, в котором ис­пользуется опция -е.

Эта опция позволяет объединить команды редактирования, следу­ющие одна за другой:sed -ne 's/ л / < hl>/' -е 's/$/ < \/hl>/p' -е 'q' rime.txtЧто касается меня, то я, конечно же, предпочитаю более экономный способ разде­ления команд, предполагающий использование точки с запятой. Кроме того, можнособрать все команды в одном файле, аналогичном представленному ниже файлу hl.sed(этот файл находится в архиве примеров).#!/usr/Ьin/sed5/ Л / <hl>/s/$/ < \/hl>/qЧтобы выполнить этот файл, перейдите в каталог(или папку), в котором находитсяфайл rime.txt, и введите в командной строке следующую команду:sed -f hl.sed rime.txtИспоnьзование Perl дnя разметки текстаНаконец, я покажу вам, как можно сделать то же самое с помощью Perl - универсаль­ного языка программирования, созданного Ларри Уоллом в 1987 году.

Этот язык получилширокую известность благодаря предусмотренной в нем мощной поддержке регулярныхвыражений и широким возможностям обработки текстов.Гnава 2. Сопоставnение с простыми wабnонами39Чтобы проверить, установлен ли Perl в вашей системе, введите в командной строкеследующую команду (нажав в конце клавишу <Enter> ):perl -vВ результате на экране отобразится номер версии Perl, установленной в вашей систе­ме, или сообщение об ошибке (см.

раздел "На заметку").Для получения того же вывода, что и в примере с редактором sed, введите в команд­ной строке следующую команду:perl -ne 'if ($.� rime. txt==1) { s/ л /<hl>/; s/$/<\/hl>/m; print; } 'которая должна отобразить уже знакомую вам строку<hl>THE RIME OF ТНЕ ANCYENT МARINERE, IN SEVEN PARTS.</hl>Распишем подробно, что делает каждая из отдельных составляющих приведеннойвыше команды Perl.• Команда per 1 вызывает программу Perl.• Опция -n задает цикл по строкам входного файла (rime.txt).• Опция -е позволяет передавать код программы из командной строки, а не из фай­ла (аналогично sed).• Оператор i f проверяет, является ли обрабатываемая строка первой.

Переменная$ . - это специальная переменная Perl, которой соответствует текущая строка.• Первая команда подстановки s находит начало первой строки ( л) и вставляет вме­сте нее открывающий тег hl.• Вторая команда подстановки находит конец строки ($) и вставляет в этой пози­ции закрывающий тег hl.• Модификатор, или флаг, m (от multiline - многострочный) в конце команды под­становки указывает на то, что вы хотите обрабатывать данную строку особымобразом, отдельно от других, и поэтому символу $ соответствует конец строки l,а не конец файла.• Наконец, команда выводит результат на стандартное устройство вывода (экран).• Опять-таки, описанные операции применяются к файлу rime.txt.Кроме того, можно собрать все команды в одном программном файле, аналогичномпредставленному ниже файлу hl.pl (этот файл находится в архиве примеров).#!/usr/bin/perl -nif ($. == 1) {g/ Л /<hl>;s/$/<\/hl>/m;pпnt;}Чтобы выполнить этот файл, перейдите в каталог (или папку), в котором находитсяфайл rime.txt, и введите в командной строке следующую команду:perl hl.pl rime.txt40Глава 2.

Сопоставление с простыми шаблонамиВ Perl любую задачу всегда можно решить множеством способов. Я вовсе не утвер­ждаю, что рассмотренный нами способ добавления тегов является наиболее эффектив­ным. Это всего лишь один из множества вариантов. Велика вероятность того, что к томувремени, когда вы будете читать книгу, я придумаю другие, более эффективные способырешения задач с помощью Perl (и других инструментов). Надеюсь, что то же самое можетбыть сказано и о вас.В следующей главе мы поговорим о границах и о так называемых условиях с нулевойдлиной совпадения (zero-width assertions).О чем вы узнапи в rпаве 2• Как находить совпадения со строковыми литералами.• Как находить совпадения с цифровыми и нецифровыми символами.• Что такое глобальный режим.• Как символьные сокращения соотносятся с символьными классами.• Как находить совпадения с символами, входящими и не входящими в состав слов.• Как находить совпадения с пробелами.• Как находить совпадения с произвольным одиночным символом с помощью точки.• Что такое режим dotall.• Как вставить НТМL-разметку в строку текста с помощью RegExr, sed и Perl.На заметку• Сайт веб-приложения RegExr: www.regexr.

com. Приложение RegExr создава­лось с использованием библиотеки Flex 3 (http://www.adobe.com/products/flex.html) на базе движка ActionScript (http: //www.adobe.com/devnet/actionscript.html), регулярные выражения которого аналогичны тем, ко­торые используются в JavaScript (https: //developer.mozilla.org/en/JavaScript/Reference/Global_Obj ects/RegExp).• Git - это быстрая система управления версиями (http://git-scm.com). GitHub(http://github.com) - это веб-репозиторий проектов, в котором использует­ся Git. Я советую использовать GitHub лишь в том случае, если вы уверенно ра­ботаете с Git или какой-либо другой современной системой управления версияминаподобие Subversion или Mercurial.• HTMLS (http://www.wЗ.org/TR/html5/) - это пятая версия разрабатыва­емого консорциумом WЗС стандарта HTML, который определяет язык разметкидокументов, публикуемых в Интернете.

В течение вот уже нескольких лет этотстандарт существует в виде чернового варианта и регулярно подвергается измене­ниям, однако воспринимается широкими кругами специалистов как бесспорныйнаследник стандартов HTML 4.01 и XHTML.• Редактор текстов sed доступен в системах Unix/Linux, включая их вер­сии для Мае (Darwin и BS D). Пользователям Windows он доступен либоГлава 2. Сопоставление с простыми шаблонами41в составе дистрибутивных пакетов, таких как Cygwin (h t t р://www. с ygwin.com), либо в виде отдельного приложения, которое можно загрузить по адресуhttp: //gnuwin32.sourceforge. net/packages/sed.htm (текущая версия4.2.1; см. http://www.gnu.org/software/sed/manual/sed.html).• Для воспроизведения примеров с Perl вам, возможно, потребуется установить Perlв своей системе. По умолчанию этот язык поставляется вместе с системой Мае OS ХLion и часто уже включен в системы Linux.

Характеристики

Список файлов книги

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6305
Авторов
на СтудИзбе
313
Средний доход
с одного платного файла
Обучение Подробнее