regulyarnyie-vyirazheniya-osnovyi (852744), страница 13
Текст из файла (страница 13)
Символьные классыТаблица 5. 1. Символьные классы POSIXКласс символовОписание[[:alnum:]]Алфавитно-цифровые символы (буквы и цифры)[[:alpha:]]Алфавитные символы (буквы)[[: ascii:]]АSСll-символы (все 128)[[:Ыank:]]Пробельные символы[[:ctrl:]]Управляющие символы[[:digit:]]Цифры[[:graph:]]Графические символы[[:lower:]]Буквы нижнего регистра[ [:print:]]Печатные символы[ [:punct:]]Знаки пунктуации[ [: space:]]Пробел[[: uppe r:]]Буквы верхнего регистра[[:word:]]Словарные символы[[:xdigit:]]Шестнадцатеричные цифрыСледующая глава посвящена сопоставлению с символами Unicode и другимисимволами.О чем вы узнаnи в rnaвe 5• Как создать символьный к ласс или набор с помощью скобочного выражения.• Как создать один или несколько диапазонов в символьном к лассе.• Как выполнить сопоставление с четными числами в диапазоне от О до 99.• Как выполнить сопоставление с шестнадцатеричным числом.• Как использовать символьные сокращения в символьном к лассе.• Как инвертировать символьный к ласс.• Как выполнить объединение и вычитание символьных к лассов.• Что такое символьные к лассы POSIX.На заметку• Настольное приложение Reggy для компьютеров Мае можно бесплатно загрузитьна сайте http://www.
reggyapp. сот. Найденные в тексте совпадения с шаблономГnава S. Символьные кnассы73выделяются изменением цвета. По умолчанию для этого используется синий цвет,но его можно заменить другим цветом на вкладке Preferences, доступ к которойвозможен через меню Reggy.• Приложение Rubular (ht tp: / /www. rubular. сот) - написанный МайкломЛовитом на языке Ruby онлайновый редактор регулярных выра жений,поддерживающий версии Ruby 1.8.7 и 1.9.2.• О четных числах, одним из которых является нуль, можно прочитать на сайтеhttp://mathworld.wolfram.com/EvenNumЬer.html.• Реализация регулярных выражений в Java ( 1.6) задокументирована на сайтеhttp://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html.• Подробнее об организации IEEE и поддерживаемом ею семействе стандартовPOSIX можно прочитать на сайте http://www.
ieee.org.74Глава S. Символьные классыГЛАВА 6Сопоставnение с символамиUnicode и друrими символамиСейчас у вас будет возможность заняться поиском совпадений с символами или диапазонами символов, выходящими за пределы стандартного набора ASCII. СтандартASCII (American Standard Code for Information lnterchange) определяет кодировку символов, представляющую цифры, буквы латинского алфавита от А до Z в верхнем и нижнемрегистре, знаки препинания, непечатные знаки и ряд других символов. Кодировка ASCIIиспользуется в течение многих лет - набор из 128 символов на основе латинского алфавита был стандартизирован еще в 1968 году. Это произошло задолго до появления персональных компьютеров, мыши и Интернета, но мне до сих пор приходится регулярнозаглядывать в таблицу ASCII.Вспоминаю, как много лет назад, когда моя профессиональная деятельность тольконачиналась, один из моих коллег-инженеров постоянно держал в своем портмоне таблицу кодов ASCII, чтобы она всегда была под рукой.Поэтому я ни в коем случае не буду отрицать значения кодировки ASCII, хотяона и кажется устаревшей в наши дни, особенно после появления стандарта Unicode(http://www.
unicode. org), текущая версия которого представляет свыше 100000 символов. В то же время Unicode не отбрасывает полностью ASCII; он включает ASCII в своюкодовую таблицу Basic Latin (http://www. unicode. org /charts/PDF /UOOOO. pdf).Текст, с которым мы будем работать, находится в файле voltaire.txt из архива примеров и представляет собой высказывание Вольтера (1694-1778), французского философаэпохи Просвещения:Quest-ce que la tolerance� C'est l'apanage de l'humanite. Nous sommes tous petris defaiЬlesses et d'erreurs; pardonnons-nous reciproquement nos sottises, cest la premiere loide la nature.В переводе на русский язык оно звучит так:Что такое терпимость� Это достояние человечества. Все мы слабы и полны заблуждений; взаимно прощать друr другу наши глупости является первым естественным законом.Сопоставление с символами UnicodeДля указания символов Unicode, известных также под названием кодовых точек(кодовых позиций), существуют различные способы.
(В данной книге под символамиUnicode будут подразумеваться символы, выходящие за пределы кодовой таблицы ASCII,хотя, если говорить строго, это не совсем так.)Начните с того, что скопируйте цитату Вольтера в нижнее текстовое поле приложенияRegexPal (http://regexpal.com), а затем введите в верхнем поле следующее выражение:\u00e9За символами \u следует шестнадцатеричное значение 00е9 (оно не чувствительно к регистру, поэтому его можно записать в виде ООЕ9).
Значению 00е9 соответствует десятичноезначение 233, которое выходит далеко за пределы диапазона значений кодов ASCII (0-127).Обратите внимание на то, что буквы е (малая буква е с дополнительным диакритическим знаком) выделены цветом в RegexPal (рис. 6.1). Это произошло потому, что символуев кодировке Unicode соответствует кодовая точка U+OOE9, совпадающая с регулярнымвыражением \UOOE9."$ mзtch эt line Ьreaks'1Q·..:•e.,-;-c� q..1� la 1=-ol�:e.:a:�? c'e:i-; :.·e.�e.:-.e.Q'� cl.e l':".•.:..zr.e.:-1:.::e. �10·..1� .,,тт.п.�.!'1 :c·..:.:i ;;��r:..:i cie f4�ble.,.,e:i�t. :i' е::�·.:.:-,: p-e.:�cr;:-:c:-.�-::c'..:3 =�-=i:;:-:cq-.:.�rr.�:::.
:-.с, :i:=:';:..�e,, ;:• �,:. :а �:er�e=� ;..-:1 О.е :а ::е.:\..:е." ·.,-cl-;e.1:� ,:60--::.-:--:iNeed more power? Get Regt>x81.1dd't а pov.-erful rec;;ie• t&ster that tnsp·reo RegevPalRound out your mastery оvег rege,: 1A1tt1 ReoexMo1gic and PowerGREPРис. 6.1. Поиск соответствий символу U+OOE9 в приложении RegexPalВ RegexPal используется реализация регулярных выражений JavaScript, которая допускает также следующий синтаксис:\хе9Введите его в RegexPal, и вы увидите, что ему соответствуют те же символы, что и выражению \U00e9.Давайте для разнообразия поработаем с другим движком регулярных выражений.Перейдите в браузере по адресу http://regexhero.net/tester. Приложение RegexHero, которое откроется сразу же после этого перехода, написано для платформы .NET76Гnава 6. Сопоставnение с симвоnами Unicode и друrими симвоnамии использует несколько отличающийся синтаксис. Скопируйте содержимое файла basho.txt в текстовую область Target String (Тестируемая строка).
В этом файле хранится отрывок из поэмы "Старый пруд': считающейся самым великим произведением японскогопоэта Мацуо Басё (который, так уж совпало, умер ровно за неделю до рождения Вольтера). Вот этот отрывок на японском языке:i!i ;t!!!1\Н/НЯМ:.,'J!<O)if-ё� (1644-1694)А вот тот же отрывок на русском языке в переводе Т.П. Григорьевой:Старый пруд!Прыгнула лягушка.Всплеск воды.- Басё (1644-1694)Для поиска соответствий в той части текста, которая написана на японском языке,введите в текстовой области Regular Expression следующее выражение:\uбсбО-Этой кодовой точке соответствует японский (китайский) иероглиф, означающий слово пруд. Как только вы введете указанное выражение, этот иероглиф выделится в текстеизменением цвета фона (рис.
6.2).СFileТоо1...J ,·egexhero.net '1llelp...'.�.....,.. �-��------1-=11a•f"ix•1-.'terLoq Jn,11lgnorr(".-..t�.IQno1eP•ttemWhrt.up.aC%t_. Mu1t1I neR t,tToleltSnot rn.,tch<'ill!t!Jltt>iMI]!(0)8� (1644-1694).Старый пруд IПрwг11Уnа .nяryuDt.a.Воnпеок еодк.-Басl! (1644-1694)ППi.J.CРис. 6.2. Поиск соответствий символу U+бсбО в приложении Regex HeroГnава 6.
Соnоставnение с симвоnами Unicode и другими симвоnами77Продолжите выполнение данного примера, попытавшись найти соответствие длинному тире(-) с помощью следующего выражения:\u2014и среднему тире(-) с помощью такого выражения:\u2013При этом наблюдайте за изменениями, происходящими с текстом.Использование редактора vimЕсли в вашей системе установлен редактор текстов vim, откройте в нем файл basho.
txtс помощью такой команды:vim basho.txtВыполните поиск, введя следующую строку, начинающуюся с символа обратной косой черты(\), и нажав после этого клавишу <Enter> или <Return>:\/%uбсб0Курсор переместится к позиции символа, совпавшего с шаблоном, как показанона рис. 6.3. Список доступных опций приведен в табл. 6.1.
Вслед за символом \% можно указать х или Х для поиска символов с кодами в диапазоне 0-255(0-FF), и - для поиска символов с четырехзначными шестнадцатеричными кодами в диапазоне 256-65535(100-FFFF)и И - для поиска символов с восьмизначными шестнадцатеричными кодами в диапазоне65536-214 74 8364 7(10000-7FFFFFFF). При этом количество доступных кодовых точекзначительно превышает то, которое в настоящее время используется стандартом Unicode.Рис. 6.3.
Поиск соответствий символу И+бсбО в редакторе vim78Гnава 6. Сопоставnение с симвоnами Unicode и другими симвоnамиТаблица 6.1. Сопоставление с символами Unicode в редакторе vlmПервый символх илихМаксимальное количествознаков кодаМаксимальное значение2255 (FF)u4u865535 (FFFF)2147483647 (7FFFFFFF)Поиск соответствий восьмеричным кодам симвоnовВ шаблонах можно использовать восьмеричные коды символов, которые могут содержать цифры от О до 7. При этом числовому коду должен предшествовать символ обратной косой черты (\), а при работе с редактором vim - дополнительно знак процентаи о (\%0).