regulyarnyie-vyirazheniya-osnovyi (852744), страница 4
Текст из файла (страница 4)
Сами по себефигурные скобки считаются метасимволами.Другой пример квантификатора - вопросительный знак (? ), который соответствуетповторению предыдущего символа нуль или один раз. В приведенном выше регулярномвыражении он следует за символом дефиса, указывая на то, что дефис может отсутствовать, а если он имеется, то не может встречаться более одного раза подряд.
Существуюти другие квантификаторы, такие как символ "плюс" ( + ), соответствующий повторениюпредыдущего символа один или более раз, и символ "звездочка" (*), соответствующийповторению предыдущего символа нуль или более раз.С использованием квантификаторов последнее регулярное выражение можно переписать в более компактной форме:(\d{З,4} [.-]?)+"Плюс" означает, что данная величина может встречаться один или несколько раз.Этому регулярному выражению будут соответствовать три или четыре цифры, за которыми следует необязательный дефис или точка, причем вся эта группа, заключеннаяв круглые скобки, может встречаться один или несколько раз ( + ).20Глава 1.
Что такое регулярные выраженияУ вас еще не кружится голова? Надеюсь, нет. Вот посимвольный анализ этого регулярного выражения:•••••••••••••••( - открывает захватывающую группу;\ - начальный символ сокращения (экранирует следующий символ);d - конечный символ сокращения (представляет произвольную одиночную цифру в диапазоне от О до 9 );{ - открывает квантификатор;3 - минимально допустимое количество вхождений;, - разделитель;4 - максимально допустимое количество вхождений;} - закрывает квантификатор;[ - открывает символьный класс;. - точка (соответствует литеральной точке);- - дефис (соответствует литеральному дефису);] - закрывает символьный класс;? - квантификатор, которому соответствует отсутствие или одиночное вхождение предыдущего символа;) - закрывает захватывающую группу;+ - квантификатор, которому соответствует одно или несколько вхождений предыдущего символа.Несмотря на то что это выражение работает, оно не совсем правильное, посколькуему соответствуют любые группы из 3 или 4 цифр, а не только те, которые вписываютсяв формат телефонного номера.
Однако ошибки учат нас лучше успеха.Поэтому давайте чуть подправим предыдущее выражение:(\d{З) [.-]?) {2)\d{4)Этому регулярному выражению соответствуют две группы по три цифры каждая,причем за любой из этих групп может следовать необязательный дефис, а вся последовательность завершается ровно четырьмя цифрами.Испоnьзование nитераnьных круrnых скобокНаконец, рассмотрим регулярное выражение, которое допускает, чтобы первая последовательность из трех цифр была заключена в круглые скобки, а кроме того, делаеттерриториальный код необязательным:Л(\(\d{З}\) I Л \d{З} [.-]?) ?\d{З) [.-]?\d{4)$Чтобы убедить вас в том, что интерпретация этого выражения не вызывает трудностей, мы также выполним его посимвольный анализ 1 :IС дискуссией по поводу этого выражения и замечаниями к нему можно ознакомиться по следующемуадресу: http://www.
oreilly. сот/ са talog /errata. csp? isbn = 978 l4 4 93 9268 О. - Примеч. ред.Глава 1. Что такое регулярные выражения21•л (символ перевода каретки) - в начале регулярного выражения или после вертикальной черты ( 1 ) указывает на то, что условием поиска является расположениетелефонного номера в начале строки;•( - открывает захватывающую группу;•\ ( - литеральная открывающая круглая скобка;•\d - представляет произвольную одиночную цифру;•{ 3} - квантификатор, которому соответствуют ровно три следующие подрядцифры (поскольку он стоит после \d);•\ ) - литеральная закрывающая круглая скобка;•1 (вертикальная черта) - разделяет альтернативные варианты.
В данном случаеона указывает на то, что территориальный код может быть задан как в скобках,так и без скобок;•л -•\d - представляет произвольную одиночную цифру;•{ 3} - квантификатор, которому соответствуют ровно три следующие подрядцифры;•[ . - ] ? - представляет необязательную точку или дефис;•) закрывает захватывающую группу;•? - делает предшествующую группу необязательной, т.е. наличие префикса, задаваемого группой, не является обязательным условием;•\d - представляет произвольную одиночную цифру;•{ 3 } - квантификатор, которому соответствуют ровно три следующие подрядцифры;•[ . - ] ? - представляет еще один необязательный элемент в виде точки или дефиса;•\d - представляет произвольную одиночную цифру;•{ 4 } - квантификатор, которому соответствуют ровно три следующие подрядцифры;представляет начало строки;• $ - соответствие концу строки.Этому окончательному регулярному выражению соответствует принятый в СШАи Канаде формат десятизначного телефонного номера, допускающий использование круглых скобок, дефисов и точек.
Опробуйте это регулярное выражение на телефонных номерах, записанных с использованием различных форматов, чтобы увидеть, какие из нихбудут (или не будут) соответствовать данному шаблону.Включение захватывающей группы в приведенное выше регулярное выражениене является необходимым. Вернее, необходима сама группа, но не ее запоминающий функционал. В подобных случаях лучше использовать незахватывающиегруппы. Почему это так, вы поймете, когда мы будем пересматривать это выражение в последней главе.22Глава 1. Что такое регулярные выраженияПрияожения со встроенным механизмомреrуяярных выраженийВ завершение главы упомяну о некоторых приложениях, в которых предусмотренаподдержка регулярных выражений.Text Mate - текстовый редактор, доступный только для компьютеров Мае, в которомиспользуется та же библиотека регулярных выражений, что и в языке программированияRuby. Для работы с регулярными выражениями используйте средство Find (Найти), какпоказано на рис.
1.3. Проследите за тем, чтобы был установлен флажок Regular expression(Регулярное выражение).orm-j?hone.txt1707-827-701�о()()FindFl,o fл(\(\d{J}\)l'ld{З}[.-]1)1\d/J}[.-]7\d{4}!•Rrplact:\т� Regular expressionUnt l Cotumn 13AscilDoc:;--T&bSizJ!:4•� lgnort case!0[!]� Wrap around-Рис.
1.3. Ввод регулярного выражения для телефонньtх номеров в редакторе Text MateNotepad++ - популярный бесплатный текстовый редактор для Windows, в которомиспользуется библиотека регулярных выражений PCRE. Для работы с регулярными выражениями используйте средство поиска и замены (рис. 1.4), щелкнув на переключателеRegular expression (Регулярное выражение).Oxygen - популярный мощный ХМL-редактор, в котором используется синтаксисрегулярных выражений Perl 5. Для работы с регулярными выражениями предусмотренодиалоговое окно Find/Replace (Найти/Заменить), показанное на рис.
1.5, и средство создания регулярных выражений языка ХМL Schema. В случае использования диалоговогоокна поиска и замены установите флажок Regular expression (Регулярное выражение).Гnава 1. Что такое регуnярные выражения23_ • S: Do•leldika\RegEx\Chtps\pho�txt - Notepad+ •Ф,11йлоПравкаphone.Ьc!i:зJПоискооB�iAКоАJ1роею1Сикт1кокыОпцииМ•кросыЗ1nуск! "'ПпаrиныОкнаG!Ji)707-827-7019НаttтмНl1йm �ь J на.fТи в ф,айпах П�п;м Iнайти: лW{3}Qiл',1{3}[.-]')?',1{3}[.·]l',1{•}sLnоа"""т•тъ __]]Нa{mi� ео ec�;-i!�ых �!С'реПахIJНоltти осе оjI_ теqщ... док_. ..Обь�P�(',,.'(,\t,'/),\x ...
)!((' i. ..,Peжwin0t1CК.aо Реrуляр. �,��ражем.Про:,рачность1-t НOSЬII! стоокиDos\\Чindowsln:l Со\:13 SeJ:010Norinal text I length: 1.2 lin�: 1т, "IQUП-8!NSРис. 1.4. Ввод регулярного выражения для телефонных номеров в редакторе Notepad++-�е: txi [C.\U.cn.\mr1:m\alde:\om't-p._,tx12 - <oXY9f'!V> ХМА. EdltOff;lc Edrt Find Pn;�t Орtоом Took Dowrnenc. VГindow Нdр�-e,:it++- -=--:- .J .....•сэ.l'l:d<'!�l''ot{!!! l)l...rjj(З!{. 7'o'(<)I-,.
. ,����������1.........., 0.'O'•th.:""""'"'"""'........I...JC.иnfltNe:""'./JW'e>.-cu,d.""""'•••()iy_ ....�--•cinvf)Dot,,....t:t.r,s"2�ц:1"es.-i'--�-'--"��t'tofnd-C.:VRr·��фonr.Ь,tРис. 1.5. Ввод регулярного выражения для сопоставленияс телефонным номером в редакторе Oxygen24Глава 1. Что такое регулярные выраженияО чем вы узнаnи в rnaвe 1• Что такое регулярные выражения.• Как использовать RegexPal - простой процессор регулярных выражений.• Как задать соответствие строковым литералам.• Как задать соответствие цифрам с помощью символьного класса.• Как задать соответствие цифрам с помощью символьного сокращения.• Как задать соответствие нецифровому символу с помощью символьного сокращения.• Как используются захватывающие группы и обратные ссылки.• Как задать соответствие точному количеству повторений символа.• Как задать соответствие необязательному символу (может быть повторен нуль илиодин раз) или символу, который должен быть повторен один или несколько раз.• Как задать соответствие тексту, находящемуся в начале или в конце строки.На заметку• RegexPal (http://www.regexpal.сот) - веб-приложение, реализующее механизм регулярных выражений JavaScript.