Сравнение с трехзначными числами

Предположим, что нам нужно найти последовательность, состоящую из трех цифр. Проще говоря, нужно найти трехзначное число. Несколько более формально это можно выразить так: найти цифру, проверить, является ли цифрой следующий символ, и если да, то проверить, является ли цифрой третий символ за ними.
Метасимвол \d означает одну цифру; значит, как было сказано выше, для поиска трех цифр подряд можно использовать шаблон
Если все три сравнения окажутся успешными, то будет найдено соответствие регу¬лярному выражению.
Пусть тестовый файл АВС123. txt содержит следующий текст:
АВС123 А234ВС A23BCD4
Деталь номер DRC22 Деталь номер XFA221 Деталь номер RRG417
Пока мы будем выполнять поиск только трехзначных чисел с помощью шаблона
\d\d\d.
В этом примере используется JavaScript — по причинам, которые будут объяснены ниже.
1. Откройте каталог, который содержит файлы ABC123.txt и UpperA.html. Откройте в текстовом редакторе файл UpperA.html и замените в нем строки
IIoMCK прописной A
var myRegExp = /А/;
DoHcx трех цифр подряд

var myRegExp = /\d\d\d/;
Сохраните файл с именем ThreeDigits .html и откройте его в Web-браузере.
2. Щелкните на кнопке с надписью Щелкните для ввода текста.
3. В появившемся окне приглашения нужно ввести проверяемую строку. Скопи¬руйте туда одну из строк из файла АВС123. txt.
4. Щелкните на кнопке ОК и просмотрите окно с сообщением, имеется ли во вве¬денной строке соответствие шаблону \d\d\d.
Попробуйте каждую из строк, которые содержатся в файле АВС123. txt. Вы може¬те создать и свои тестовые строки. Обратите внимание, что шаблон \d\d\d соответ¬ствует любой последовательности трех цифр подряд, но не одиночным цифрам и не парам цифр.
Механизм обработки регулярных выражений ищет цифровой символ. Если первый рассматриваемый символ не является цифровым, механизм переходит к следующему символу тестовой строки и проверяет его. Если это не цифра, он переходит дальше и снова выполняет проверку.
.Если найдено соответствие первому вхождению \d, то механизм обработки регу¬лярных выражений сдвигается на следующий символ и проверяет, является ли и он цифровым. Если да, то на соответствие метасимволу \d (т.е. цифре) проверяется-тре¬тий символ. Если три символа подряд являются цифровыми, то найдено соответствие регулярному выражению \d\d\d.
Действие этого процесса сравнения можно наблюдать с помощью Komodo Regular Expression Toolkit. Откройте Komodo Regular Expression Toolkit и удалите старую ин¬формацию из полей ввода. Введите А234ВС в поле тестируемой строки, а в поле регу¬лярного выражения — шаблон \d. Вы увидите, что выделена (т.е. найдена) первая циф¬ра — 2. Добавьте в поле регулярного выражения еще одно \d — теперь будут выделены цифры 23. И, наконец, добавьте третье \d, чтобы завершить регулярное выражение \d\d\d, в результате чего будет найдена подстрока 234 (рис. А.8).
Вы можете опробовать этот шаблон с другими строками из файла ABC123.txt. Поэкспериментируйте со своими тестовыми строками, содержащими цифры, и по¬смотрите, какие символы будут выделены. В Komodo Regular Expression Toolkit для правильного обнаружения соответствия может понадобиться добавить после тесто¬вой строки пробел.
Почему в описанном выше примере применялся JavaScript? Да потому, что OpenOffice.org Writer не содержит метасимвола \d. В нем сравнение с цифрами вы¬полнить не так легко. А на рис. А.9 показан результат сравнения содержимого файла АВС123. txt с шаблоном \d\d\d с помощью OpenOffice.org Writer.
Как видно на рис. А.9, в OpenOffice.org Writer соответствие не обнаружено. Для цифровых символов в OpenOffice.org Writer применяется нестандартный синтаксис, в котором нет метасимвола \d.
Одним из решений подобной проблемы в OpenOffice.org Writer является примене¬ние классов символов. Пока достаточно сказать, что регулярное выражение
[0-9][0-9][0-9]
дает тот же результат, что и шаблон \d\d\d, т.е. шаблон [0-9] [0-9] [0-9] означает то же самое, что и \d\d\d. Поиск трех цифр подряд в файле АВС123. txt с помощью этого класса символов показан на рис. А.10.
Другой синтаксис в OpenOffice.org Writer использует метасимволы P0SIX.
Утилита f indstr также не знает метасимвол \d, так что если вы захотите восполь¬зоваться ей для сравнения с образцом, то придется использовать в командной строке вышеуказанный класс символов следующим образом:
findstr /N [0-9][0-9][0-9] ABC123.txt
Соответствия будут найдены в четырех строках (рис. А.11). Приведенная выше ко¬мандная строка работает правильно, только если файл АВС123. txt находится в теку¬щем каталоге. Если он находится в другом каталоге, то в командной строке необходи¬мо указать путь файла.
В следующем разделе будут объединены освоенные вами приемы, чтобы находить сочетания буквально указанных символов и последовательностей символов.

В простых регулярных выражениях часто бывает нужно найти сочетание лите¬ральных одиночных символов плюс последовательности символов.
Имеется почти бесконечное количество вариантов сочетания символов, которые вы можете проверять. В данном разделе будет рассмотрен очень простой список но¬меров деталей и выполнен поиск таких номеров, которые начинаются с кода DOR, за которым следуют три цифры. В этом случае регулярное выражение должно выпол¬нять следующую задачу:
Найти прописную букву D. Если она найдена, проверить, является ли следующий символ прописной буквой О. Если это так, то проверить, является ли следующий символ пропис¬ной буквой R. Если эти три символа обнаружены, проверить, являются ли три следующих символа цифрами.
Поиск литеральных символов и последовательностей символов
Для этого примера будет использован файл PartNumbers. txt с таким текстом:
BEFI23 RRG417 DOR234 DOR123 CCG991
В начале попробуем выполнить упражнение в OpenOffice.org Writer, не забывая, что вместо \d нужно использовать шаблон [0-9].
и щелкните на
1. Откройте в OpenOffice.org Writer файл PartNumbers.txt и нажмите комбина¬цию клавиш , чтобы открыть диалоговое окно Найти и заменить.
2. Установите флажки Регулярное выражение и Учитывать регистр.
3. Введите в текстовом поле Найти шаблон DOR[0-9] [0-9] [0-9] кнопке Найти все.
Будут выделены строки DOR234 и DOR123, что означает, что они соответствуют за¬данному регулярному выражению.
Механизм обработки регулярных выражений вначале ищет прописную букву D. Для этого с ней сравниваются все символы по очереди.
Если соответствие обнаружено, то механизм обработки регулярных выражений проверяет следующий символ, чтобы определить, является ли он буквой О. Если и это так, то он проверяет, является ли третий символ буквой R. Если все эти три буквы най¬дены, то тогда механизм проверяет, является ли четвертый символ цифрой. Если да, то он проверяет, является ли цифрой пятый символ. Если да, проверяется, является ли цифрой шестой символ. Если и здесь все в порядке, то обнаружено соответствие всему регулярному выражению. Каждое такое соответствие означается в OpenOffice. org Writer выделенными последовательностями символов.
Можно проверить, имеются ли файле PartNumbers. txt соответствия шаблону
DOR[0-9] [0-9] [0-9]
с помощью утилиты командной строки f indstr. Для этого нужно ввести следующую команду:
findstr /N DOR[0-9][0-9][0-9] PartNumbers.txt
Как видно на рис. А. 12, соответствие обнаружено в тех же строках DOR234 и DOR123. Если каталог, который содержит файл PartNumbers. txt, не является текущим катало¬гам в командном окне, то необходимо указать путь файла.
Щля обнаружения соответствия шаблону D0R\d\d\d можно воспользоваться и Komodo Regular Expression Toolkit. На рис. А. 13 показана найденная строка DOR123
Теперь вы умеете обнаруживать последовательность символов, каждый из которых встречается точно один раз. А в следующем разделе вы научитесь выполнять сравне¬ния с символами, которые могут встречаться произвольное количество раз.