regulyarnyie-vyirazheniya-osnovyi (852744), страница 5
Текст из файла (страница 5)
Данная реализация не является наиболееполной и поддерживает не все возможности регулярных выражений. В то же время это приложение предоставляет множество возможностей для начинающих, чтоделает его весьма простым и удобным в работе инструментом, пригодным для использования в учебных целях.• Для работы с примерами книги можно использовать браузер Google Chrome(https://www.google.com/chrome) или MozillaFirefox(http://www.mozilla.org/en-US/ f irefox/new/).• Благодаря чему регулярные выражения способны обеспечивать многовариантные решения? Одним из факторов, способствующих этому, служит то, что регулярные выражения обладают замечательным свойством - компонуемостью (composability).
(Подробное объяснение этого термина, данное Джеймсом Кларком, можно найти по адресуhttp://www.thaiopensource.com/relaxng/design.html#section: 5.)Когда о языке, будь то формальный язык, язык программирования или язык схем,говорят, что он обладает свойством компонуемости, то под этим подразумевается,что можно не только использовать его отдельные атомарные части, но и комбинировать их всевозможными способами с помощью методов, предоставляемых самимязыком. Как только вы научитесь работать с отдельными составными частями регулярных выражений, вы сможете находить соответствия шаблонам любой степенисложности.• Приложение TextМate доступно по адресу http: //www.macromates .сот.Для получения более подробной информации относительно использования регулярных выражений в TextMate посетите сайт http: //manual .macromates.com/en/regular_expressions.Гnава 1.
Что такое регуnярные выражения25• Для получения более подробной информации относительно приложения Notepad++посетите сайт http://notepad-plus-plus.org. С документацией, содержащейописание порядка использования регулярных выражений в приложении Notepad++,можно ознакомиться по адресу http://sourceforge.net/apps/mediawiki/notepad-plus/index.php?title=Regular_Expressions• О приложении Oxygen можно прочитать на сайте http://www.oxygenxml.com.Информация относительно использования регулярных выражений посредством диалогового окна поиска и замены доступна по адресу ht t р :/ / www.oxygenxml.com/doc/u g-editor/topics/find-replace-dialog.html.
Информация относительно средства создания регулярных выраженийXML Schema доступна по адресу http://www.oxygenxml.com/doc/ugditor/topics/XML-schema-regexp-builder.html.26Глава 1. Что такое реrуnярные выраженияГЛАВА 2Сопоставление с простыми шаблонамиРабота механизма регулярных выражений основана на сопоставлении текста с некоторым шаблоном, нахождении фрагментов, соответствующих этому шаблону, и выполнении над ними определенных действий. В этой главе рассматриваются простейшие способы поиска совпадений текста с шаблоном с помощью следующих элементов:••••строковые литералы;цифры;буквы;произвольные символы.В первой главе для демонстрации работы регулярных выражений использовалосьприложение RegexPal, написанное Стивеном Левитаном.
В этой главе мы воспользуемсясайтом RegExr Гранта Скиннера (www. regexr. сот), как показано на рис. 2.1.Каждая страница данной книги будет уводить вас все дальше в "дебри" регулярных выражений. Однако вы в любой момент можете сделать кратковременныйпривал, чтобы разобраться с синтаксисом. Я хочу сказать, что вы должны пытаться опробовать новые возможности сразу же после того, как прочитали о них.Не бойтесь экспериментировать. Ошибайтесь.
Старайтесь докопаться до сутии лишь затем вновь устремляйтесь вперед. Не существует никакого другого способа научиться загонять шар прямо в лузу, кроме как пытаться это сделать.Прежде чем мы продолжим, хочу сказать несколько слов о том, какого рода помощь вам может оказать RegExr. Обратите внимание на ссылки Examples (Примеры)и Community (Сообщество) в левой части окна. Первая из них приведет вас к примерам,иллюстрирующим синтаксис регулярных выражений, а вторая - к множеству регулярных выражений, предложенных членами сообщества и снабженных рейтинговыми оценками. Используя эти ссылки, вы найдете массу полезной для себя информации.
Дополнительные сведения можно получить, наведя указатель мыши на регулярное выражениеили текст в окне RegExr. Именно благодаря возможности использования этих вспомогательных ресурсов RegExr стал одним из моих излюбленных онлайновых тестеров регулярных выражений.w+toegEv2.
0 Ьу gski nneг. com !press,on & Те t to see matches. Roll over matcl,es01- the expres$ioп for detail5, Undo n11stakes v1ith ctrl-z.Sэ е & Share expressioпs \Vith friends 01· tl,e (on1m�Фit .• Аfull Refe1-enct1; &, Help is av.эi1ab\e in the ibrJr , о,· watchthe video Tutor; l.Senpl,.., text. fo,· testing:abcdefgh, J klmi,opqгs tuvw�yz ABCDEFGIO JКL0123456789 ·-. , l@as•, t, · (); \/ 1 <>" ·12345 -98.7 З,141 .6180 9,000 -42555.123,4567-1-(800)-555-2468foo@demo.netbaг.ba@test.co.ukhttp://foo.eo.uk/http://гegeaг.com/foo.htmllq=baгРис. 2.1. Вид веб-приложения RegExr в окне браузера Google ChromeНа рис.
2.1 представлена последняя версия RegExr 2. Для работы с примерами, приведенными в книге, нам будет удобнее использовать версию RegExr l, несмотря на точто в настоящее время она считается устаревшей. Чтобы получить доступ к этой версиивеб-приложения, достаточно щелкнуть на ссылке RegExr v1 в правом верхнем углу окна.Щелкнув в открывшемся окне на ссылке Desktop Version (Настольная версия), вы сможете загрузить настольную версию RegExr vl, которую мы далее будем использовать.В качестве основного текста, с которым мы будем работать в этой и последующихглавах, выбрана поэма Сэмюэла Тейлора Кольриджа "The Rime of the Ancient Mariner"("Сказание о старом мореходе"), впервые опубликованная в сборнике "Лирические баллады" (1798). На первых порах мы ограничимся простой текстовой версией оригинала,однако впоследствии будем работать с версией текста, размеченной тегами HTMLS.
Полный текст поэмы хранится в архиве примеров в файле rime. txt, но в этой главе мы будемиспользовать лишь начальные строки поэмы.ТНЕ RIМE OF ТНЕ ANCYENT МARINERE, IN SEVEN PARTS.ARGUМENT.How а Ship having passed the Line was driven Ьу Stormsto the cold Country towards the South Pole; and how fromthence she made her course to the tropical Latitude of theGreat Pacific Ocean; and of the strange things that befell;28Глава 2.
Сопоставление с простыми шаблонамиand in what manner the Ancyent Marinere came back to hisown Country.I.1234It is an ancyent Marinere,And he stoppeth one of three:"Ву thy long grey beard and thy glittering еуе"Now wherefore stoppest me?Скопируйте данный текст и вставьте его в нижнее текстовое поле в окне приложенияRegExr. Этот же текст содержится в файле rime-intro.txt, который можно найти на сайтеGithub по следующему адресу:https://github.com/michaeljamesfitzgerald/�Introducing-Regular-ExpressionsТочно такой же файл rime-intro.txt, как и файл rime.txt, находится в архиве примеровпо следующему адресу:http://examples.oreilly.com/9781449392680/examples.zipСоответствие nитераnьному текстуНаиболее очевидный и тривиальный способ применения регулярных выражений это сопоставление строк с одним или более литеральными символами, называемымистроковь1ми литералами, или просто литералами.Поиск соответствий строковым литералам выполняется с использованием обычныхлитеральных символов.
Чувствуется что-то знакомое, не так ли? Это напоминает поискфрагментов текста в текстовых процессорах или отбор информации по ключевым словам в поисковых системах. Когда вы выполняете поиск текстовой строки путем простогопосимвольного сравнения текста с шаблоном, вы фактически осуществляете поиск с помощью строкового литерала.Например, чтобы найти соответствие слову (строке символов) Ship, которое находится в самом начале поэмы, достаточно ввести слово Ship в верхнем текстовом поле окнаRegExr, и оно автоматически подсветится в тексте, находящемся в нижнем поле. (Вводяслово Ship, не забудьте, что оно должно начинаться с прописной буквы S.)Ну что, получилось? Слово Ship должно было выделиться синим цветом. Если этогоне произошло, проверьте правильность ввода.По умолчанию сопоставление строк в RegExr выполняется с учетом регистрасимволов.
Если вы не хотите различать символы нижнего и верхнего регистра,установите флажок ignore case (игнорировать регистр) в верхней части окна.В результате шаблон найдет не только слово Ship, но и слово ship, если оно также будет присутствовать в целевом тексте.Соответствие цифрамДля поиска соответствий цифрам введите в верхнем текстовом поле окна RegExr следующий метасимвол:\dГnава 2. Сопоставnение с простыми шабnонами29Поскольку флажок global (глобальный режим) по умолчанию установлен, данному метасимволу будет соответствовать каждая из цифр, встречающихся в тексте (рис.
2.2). Приснятом флажке global выражение \d найдет только первое вхождение цифрового символа.RegbrReplaceMatch;!.,;\ show 111U1gnoreCaseglob•IU @'riended'-- dotallТНЕ RIME OF ТНЕ ANCYENi МARINERE, IN SEVEl,1 PARTS.ARGUMENТ,\W\dHow а Shlp hillving pilssed the Une v1as driven Ьу Storms to the coldCountry tow;trds the South Pole1 and hov1 from thence she m•d• her cour•eto the tropic.111 LaШude of the Greiilt Paciflc Ocean; and of t:Me strangethings that befellt and ln what manner the Ancyent Mar/ner• came back tohis ovm Country,1.12(34ConvnuaitySillmple.s\d\О\,\S(АБС)[ААВС]lt is an ancyent Marin•r•,And he stoppeth one of thre•:"Bv thy long grey Ьеагd iiПd thy glittering еуе•Now .,;,eгefore stoppest me"[a-z)Mat.che:• •nv cheracu,, e)(c•pt for l1n�ь�эks ,, dotall 11 false.But still he holds the v,edding-guest-Theгe was а Ship, Quoth he-''Nay, lf thou'st got а laughsome tale.RegExp: / d/gpattern: \dAillgs1 gО c:.aptvrrng g"oups:А outegExrРис. 2.2.
Поиск всех вхождений цифр в окне RegExr с помощью символьного сокращения \ dА теперь используйте вместо сокращения \d эквивалентный ему символьный класс:[0-9]Как видите, несмотря на различия в синтаксисе, оба выражения, как \d, так и [0-9],приводят к одному и тому же результату (рис. 2.3)...,# ••....Более подробно о символьных классах речь пойдет в главе 5 .Символьный класс [ 0-9] - это диапазон, которому соответствует любая одиночнаяцифра от О до 9. Этот же диапазон можно было бы задать, перечислив все принадлежащие ему цифры:[0123456789]Чтобы найти вхождения только двоичных цифр О и 1, можно использовать следующий символьный класс:[01]30Гnава 2.
Сопоставnение с простыми шабnонамиR•gExrReplкeM•tchSampl�[0-9]!!..LgloballgnoreCasl!!t.Jt�tendedLJ dotallНу S.vedCommunrtyshowallL-J ,,.,ultillne\е,ТНЕ RIME OF ТНЕ ANCYENТ МARINERE, IN SEVEl'i PARTS.\WARGUMENi.\dHov, а Ship having passed tl,e Line vras driven Ьу Storms to the coldCountry towards the South Pole; and how from thence st,e made h@r courseto the troprcal Liilt:Jtude of the Great Padfic Ocean: and of tke strangeth1ngs that befell: and in W'mat manner the Ancyent Marinere came back tohi.s ov,n Country.\D\s\S[А!!С]!.[�АВС][a·z]It ls an ancyent Marlnere,And he stoppeth one of three:"Ву thy long grey beerd and thy glittering еуе�Now wheгefore stoppest me?1234Metc.hes any charact@r e.xc•pt for l1n1Rbreзks if dotall is falseBut still he holds t:he v11e:dding-gue:st-There was • Shlp, quoth he-·"Nay, lf thou'st got а laughsome.