Windows Script Host для Windows 2000/XP
Шрифт:
Поиск файлов с использованием регyлярных выражений
Всем хорошо известно, что для поиска файлов и папок с помощью стандартных средств Windows в именах можно использовать подстановочные символы "?" (обозначает любой один символ) и "*" (обозначает любое число любых символов). Например, на рис. 5.12 представлен результат поиска файлов *.sys (все файлы с расширением sys) на диске С:.
Рис. 5.12. Использование подстановочных символов при поиске файлов
В сценариях WSH можно производить поиск файлов (как и любого другого текста) с помощью гораздо более сложных правил для определения соответствий. Для этого используются регулярные выражения, которые определяют образец текста для поиска. Для задания этого образца используются литералы и метасимволы. Каждый символ, который не имеет специального значения в регулярных выражениях, рассматривается как литерал и должен точно совпасть при поиске. Метасимволы — это символы со специальным значением в регулярных выражениях. Описание наиболее часто используемых метасимволов приведено в табл. 5.14.
Таблица 5.14. Некоторые метасимволы, использующиеся в регулярных выражениях
Символы | Описание |
---|---|
\ | Следующий символ будет являться специальным символом или, наоборот, литералом. Например, n означает символ "n", а "\n " означает символ новой строки. Последовательности \\ соответствует символ "\", а \( — символ "(" |
^ | Начало строки |
$ | Конец строки |
* | Предыдущий символ повторяется любое число раз (в том числе ни разу). Например, выражению zo* соответствуют как "z", так и "zoo" |
+ | Предыдущий символ повторяется не менее одного раза. Например, выражению zo+ соответствует "zoo", но не "z" |
? | Предыдущий символ повторяется не более одного раза |
. (точка) | Любой символ, кроме перевода строки |
х|у | Либо
z|food соответствуют "z" или "food" |
[xyz] | Множество символов. Означает любой один символ из набора символов, заключенных в квадратные скобки. Например, выражению [abc] соответствует символ "а" в слове "plain" |
[a-z] | Диапазон символов. Означает любой один символ из заданного диапазона. Например, выражению [a-z] соответствует любая буква английского алфавита в нижнем регистре |
[^m-z] | Означает любой символ, не входящий в заданный диапазон. Например, выражению [^m-z] соответствует любой символ, не попадающий в диапазон символов от "m" до "z" |
\b | Граница слова, т.е. позиция между словом и пробелом. Например, выражению er\b соответствует символ "er" в слове "never", но не в слове "verb" |
\В | Позиция внутри слова (не на границе). Например, выражению еа*r\B соответствует подстрока "ear" в "never early" |
\d | Символ, обозначающий цифру. Эквивалентно [0-9] |
\D | Любой символ, кроме цифры. Эквивалентно [^0-9] |
Метасимволы можно употреблять совместно, например, комбинация
Более подробную информацию о регулярных выражениях можно найти, например, в документации Microsoft по языку VBScript.
В качестве примера использования регулярных выражений в листинге 5.18 приведен сценарий FindRegExp.js, в котором производится поиск в подкаталоге ForFind текущего каталога всех файлов, имена которых начинаются с символов "П", "А" или "И" и имеют расширение txt.
Для получения доступа к каталогу ForFind в сценарии используется метод
Поиск нужных файлов будет выполняться с помощью следующего регулярного выражения:
Сам поиск и вывод имен найденный файлов производятся в функции
Элементы коллекции просматриваются в цикле
Для текущего файла в коллекции выделяется его имя, которое затем с помощью метода