При сравнении с регулярным выражением А было использовано стандартное по¬ведение механизма обработки регулярных выражений: если не указано, сколько раз должен встречаться символ (или последовательность символов), то считается, что каждый символ шаблона встречается в точности один раз. А если понадобится ^обна¬ружить появление символов в другом количестве, нужно вставить в регулярное выра¬жение квантификатор (указатель количества). Это поведение также позволяет искать вхождения последовательностей одного и того же символа.
Чтобы найти два одинаковых символа без других символов (включая пробельные) между ними, можно просто использовать шаблон, в котором нужный символ записан дважды.
В качестве примера рассмотрим, как можно найти последовательности символов, где символ встречается точно два раза — например, двойная н в таких словах, как тонна и особенно.
Формулировка задачи для такого сравнения выглядит следующим образом: Найти все вхождения строчной буквы н, за которой непосредственно следует еще одна буква н.
Поиск будет выполняться в файле DoubledH. txt, содержащем такой текст:
Анна Ванна, наш отряд хочет видеть поросят!
Этот анекдот особенно поучителен для читателей.
Яблоки и тыблоки - разновидности блоков.
Масса фриэии была эаангажирована.
Ежедневно на траве находили несколько тонн маяны.
Вхождениям нн в этом файле соответствует шаблон
нн
1. Откройте OpenOffice.org Writer, и откройте в нем файл DoubledH. txt.
2. Нажмите комбинацию клавиш , чтобы открыть диалоговое окно Найти и заменить.
3. Установите флажки Регулярное выражение и Учитывать регистр.
4. Введите в текстовом поле Найти шаблон нн и щелкните на кнопке Найти все.
На рис. А5 показан файл DoubledH.txt, открытый в OpenOffice.org Writer. Обра¬тите внимание, что выделены все вхождения нн, но отдельные буквы н не выделены.
Шаблон нн указывает, что механизм обработки регулярных выражений должен выполнить сравнение со строчной буквой н, и если она найдена, сравнить с н следую¬щую букву. Все сравнение будет успешным, если вторая буква также является строчной буквой н.
Если сравнение первой буквы завершается неудачей, проверяется следующая буква и т.д. — каждая буква проверяется на совпадения с первой н из регулярного выражения.
Это же можно выполнить и с помощью средства Komodo Regular Expression Toolkit, показанного на рис. А.6, где осуществляется поиск последовательных строч¬ных букв т. Загрузить последнюю пробную версию Komodo IDE, в которую входит и Komodo Regular Expression Toolkit, можно по адресу http://activestate.com/ Products/Komodo. В данном приложении используется Komodo версии 4.2. Удалите в Komodo Toolkit текст в полях регулярного выражения и проверяемого текста. В поле сравниваемой строки введите слово натруженно, а в поле регулярного выражения — н. В этом случае будет найдена первая буква н слова натруженно. Если в поле регулярно¬го выражения добавить еще одну н, то выделение сместится на буквы нн в середине слова натруженно, как показано на рис. А.6.
Эти два примера показывают, как можно выполнять поиск парных символов с по¬мощью одного из возможных вариантов синтаксиса. Далее в этом приложении вы по¬знакомитесь с другим синтаксисом сравнения с точным количеством последователь¬ных вхождений нужного символа, которое может быть любым числом, а не только 2. Этот другой синтаксис использует фигурные скобки и, кроме точного количества, позволяет находить и переменное количество вхождений.
Для поиска трех одинаковых символов можно просто использовать шаблон с тремя одинаковыми буквами. Например, для поиска номеров деталей, имеющих вид ААА123 (т.е. три буквы А, за которыми следуют три цифры), шаблон должен начинаться так:Для сравнения со второй частью таких номеров, необходимо ввести концепцию метасимволов (metacharacter). Шаблоны, которые вы видели до сих пор, содержали символы, которые обозначали сами эти символы. Метасимвол — это один или два сим¬вола (первый обычно обратный слэш), значение которых отличается от литерального значения этих символов.
Имеется несколько способов поиска цифровой части номеров ААА123. Один из них имеет следующий вид:
' \d\d\d
Каждая пара символов \d представляет собой метасимвол, который означает циф¬ру от 0 до 9 включительно. Метасимвол \d не означает обратный слэш, за которым следует строчная буква d.
Обратите внимание, что метасимвол \d существенно отличается по значению от литеральных символов, которые применялись в рассмотренных раньше шаблонах. Символ А в шаблоне соответствует только букве А, а метасимвол \d соответствует лю¬бом цифре: 0, 1, 2, 3, 4, 5, 6, 7, 8 или 9.
Метасимвол часто соответствует классу символов. В данном случае метасимвол \d соответствует классу символов — цифрам.
Шаблон \d\d\d соответствует трем последовательным цифрам, т.е. 012, 234, 345, 999 и сотням других трехзначных чисел.