Поиск файлов с использованием регyлярных выражений

Поиск файлов с использованием регyлярных выражений

Всем хорошо известно, что для поиска файлов и папок с помощью стандартных средств Windows в именах можно использовать подстановочные символы "?" (обозначает любой один символ) и "*" (обозначает любое число любых символов). Например, на рис. 5.12 представлен результат поиска файлов *.sys (все файлы с расширением sys) на диске С:.

Рис. 5.12. Использование подстановочных символов при поиске файлов

В сценариях WSH можно производить поиск файлов (как и любого другого текста) с помощью гораздо более сложных правил для определения соответствий. Для этого используются регулярные выражения, которые определяют образец текста для поиска. Для задания этого образца используются литералы и метасимволы. Каждый символ, который не имеет специального значения в регулярных выражениях, рассматривается как литерал и должен точно совпасть при поиске. Метасимволы — это символы со специальным значением в регулярных выражениях. Описание наиболее часто используемых метасимволов приведено в табл. 5.14.

Таблица 5.14. Некоторые метасимволы, использующиеся в регулярных выражениях

Символы Описание
Следующий символ будет являться специальным символом или, наоборот, литералом. Например, 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"
 Граница слова, т.е. позиция между словом и пробелом. Например, выражению er соответствует символ "er" в слове "never", но не в слове "verb"
В Позиция внутри слова (не на границе). Например, выражению еа*rB соответствует подстрока "ear" в "never early"
d Символ, обозначающий цифру. Эквивалентно [0-9]
D Любой символ, кроме цифры. Эквивалентно [^0-9]

Метасимволы можно употреблять совместно, например, комбинация ".*" означает любое число любых символов.

Замечание

Более подробную информацию о регулярных выражениях можно найти, например, в документации Microsoft по языку VBScript.

В качестве примера использования регулярных выражений в листинге 5.18 приведен сценарий FindRegExp.js, в котором производится поиск в подкаталоге ForFind текущего каталога всех файлов, имена которых начинаются с символов "П", "А" или "И" и имеют расширение txt.

Для получения доступа к каталогу ForFind в сценарии используется метод GetFolder объекта FileSystemObject:

//Создаем объект WshShell

WshShell=WScript.CreateObject("WScript.Shell");

//Создаем объект FileSystemObject

FSO=WScript.CreateObject("Scripting.FileSystemObject");

//Создаем объект Folder для доступа к подкаталогу ForFind

//текущего каталога

Folder = FSO.GetFolder(WshShell.CurrentDirectory+"\ForFind");

Поиск нужных файлов будет выполняться с помощью следующего регулярного выражения:

//Создаем регулярное выражение (объект RegExp)

RegEx=new RegExp("^[ПАИ].*.txt$", "i");

Сам поиск и вывод имен найденный файлов производятся в функции FindFilesInFolder(Fold, RegEx). Здесь сначала инициализируются счетчик найденных файлов и переменная, в которой будут сохраняться имена найденных файлов, а также создается объект Enumerator (переменная Files) для доступа к файлам каталога Fold:

ColFind=0; //Счетчик найденных файлов

SFileNames=""; //Строка с именами файлов

//Создаем коллекцию файлов в каталоге Fold

Files=new Enumerator(Fold.Files);

Элементы коллекции просматриваются в цикле while:

//Цикл по всем файлам в коллекции

while (!Files.atEnd()) {

 Files.moveNext(); //Переходим к следующему файлу

}

Для текущего файла в коллекции выделяется его имя, которое затем с помощью метода test объекта RegExp проверяется на соответствие заданному регулярному выражению:

//Выделяем имя файла

SName=Files.item().Name;

//Проверяем, соответствует ли имя файла регулярному выражению

if (RegEx.test(SName)) {

 ColFind++; //Увеличиваем счетчик найденных файлов

 //Добавляем имя файла к переменной SFileNames

 SFileNames+=SName+ " ";

}

В конце функции FindFilesInFolder(Fold, RegEx) на экран выводятся имена найденных файлов и их общее количество:

SItog="Найдено файлов: "+ColFind;

//Выводим на экран имена и количество найденных файлов

WScript.Echo(SFileNames+SItog);

Листинг 5.18. Поиск файлов, имена которых соответствуют регулярному выражению

/*******************************************************************/

/* Имя: FindRegExp.js                                              */

/* Язык: JScript                                                   */

/* Описание: Поиск файлов, имена которых соответствуют заданному   */

/*           регулярному выражению                                 */

/*******************************************************************/

//Объявляем переменные

var WshShell,FSO,Folder,ColFind,RegExp,SFileNames;

//Функция для поиска файлов в заданном каталоге

function FindFilesInFolder(Fold,RegEx) {

 var Files,SName; //Объявляем переменные

 ColFind=0; //Счетчик найденных файлов

 SFileNames=""; //Строка с именами файлов

 //Создаем коллекцию файлов в каталоге Fold

 Files=new Enumerator(Fold.Files);

 //Цикл по всем файлам в коллекции

 while (!Files.atEnd()) {

  //Выделяем имя файла

  SName=Files.item().Name;

  //Проверяем, соответствует ли имя файла регулярному

  //выражению

  if (RegEx.test(SName)) {

   ColFind++; //Увеличиваем счетчик найденных файлов

   //Добавляем имя файла к переменной SFileNames

   SFileNames+=SName+" ";

  }

  Files.moveNext(); //Переходим к следующему файлу

 }

 SItog="Найдено файлов: "+ColFind;

 //Выводим на экран имена и количество найденных файлов

 WScript.Echo(SFileNames+SItog);

}

/*******************  Начало  **********************************/

//Создаем объект WshShell

WshShell=WScript.CreateObject("WScript.Shell");

//Создаем объект FileSystemObject

FSO=WScript.CreateObject("Scripting.FileSystemObject");

//Создаем объект Folder для доступа к подкаталогу ForFind

//текущего каталога

Folder = FSO.GetFolder(WshShell.CurrentDirectory+"\ForFind");

//Создаем регулярное выражение (объект RegExp)

RegExp=new RegExp("^[ПАИ].*.txt$","i");

//Ищем файлы, имена которых соответствуют регулярному

//выражению RegExp в каталоге Folder

FindFilesInFolder(Folder,RegExp);

/*************  Конец *********************************************/

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Поиск в содержимом файлов

Из книги Тонкости реестра Windows Vista. Трюки и эффекты автора Клименко Роман Александрович

Поиск в содержимом файлов По умолчанию операционная система Windows Vista поддерживает возможность выполнения поиска в содержимом файлов со следующими расширениями: ASM, BAT, C, CMD, CPP, DIC, H, INF, INI, JAVA, LOG, M3U, MDB, RC, REG, SQL, TXT, VBS, WRI и т. д.Однако вы можете самостоятельно определить расширения


7.7. Поиск файлов

Из книги Самоучитель работы на компьютере автора Колисниченко Денис Николаевич

7.7. Поиск файлов Для поиска файлов выполните команду главного меню Windows Пуск, Найти, Файлы и папки или нажмите Win+F — так будет быстрее. Вы увидите окно поиска (рис. 64). Помощник поиска предложит вам выбрать категории файлов, которые вы хотите найти. Если вы не собираетесь


Копирование файлов с использованием стандартной библиотеки С

Из книги Системное программирование в среде Windows автора Харт Джонсон М

Копирование файлов с использованием стандартной библиотеки С Как видно из текста программы 1.1, стандартная библиотека С поддерживает объекты потоков ввода/вывода FILE, которые напоминают, несмотря на меньшую общность, объекты Windows HANDLE, представленные в программе


Копирование файлов с использованием Windows

Из книги Программирование на языке Ruby [Идеология языка, теория и практика применения] автора Фултон Хэл

Копирование файлов с использованием Windows В программе 1.2 решается та же задача копирования файлов, но делается это с помощью Windows API, а базовые приемы, стиль и соглашения, иллюстрируемые этой программой, будут использоваться на протяжении всей этой книги.Программа 1.2. cpW:


Копирование файлов с использованием вспомогательной функции Windows

Из книги Как найти и скачать в Интернете любые файлы автора Райтман М. А.

Копирование файлов с использованием вспомогательной функции Windows Для повышения удобства работы в Windows предусмотрено множество вспомогательных функций (convenience functions), которые, объединяя в себе несколько других функций, обеспечивают выполнение часто встречающихся задач


Пример: последовательная обработка файлов с использованием метода отображения

Из книги Первые шаги с Windows 7. Руководство для начинающих автора Колисниченко Денис Н.

Пример: последовательная обработка файлов с использованием метода отображения Программа atou (программа 2.4) иллюстрирует последовательную обработку файлов на примере преобразования ASCII-файлов к кодировке Unicode, приводящего к удвоению размера файла. Этот случай является


Пример: преобразование файлов с использованием перекрывающегося ввода/вывода и множественной буферизации

Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен

Пример: преобразование файлов с использованием перекрывающегося ввода/вывода и множественной буферизации Программа 2.4 (atou) осуществляла преобразование ASCII-файла к кодировке UNICODE путем последовательной обработки файла, а в главе 5 было показано, как выполнить такую же


10.1.34. Поиск файлов и каталогов

Из книги Профессиональный поиск в Интернете автора Кутовенко Алексей

10.1.34. Поиск файлов и каталогов Ниже мы воспользовались стандартной библиотекой find.rb для написания метода, который находит один или более файлов и возвращает их список в виде массива. Первый параметр — это начальный каталог, второй — либо имя файла (строка), либо


Поиск файлов на FTP-серверах

Из книги Linux и UNIX: программирование в shell. Руководство разработчика. автора Тейнсли Дэвид

Поиск файлов на FTP-серверах FTP-серверы привлекательны тем, что обеспечивают возможность получать доступ непосредственно к файлам (без текстовой информации) и быстрее (чем по протоколу HTTP) загружать выбранные объекты на жесткий диск компьютера. Самое сложное в Интернете —


Поиск и закачка файлов

Из книги автора

Поиск и закачка файлов Теперь, когда мы познакомились с окном программы DC++, следует приступить к поиску и закачке понравившихся файлов.Как уже упоминалось ранее, загрузка файлов в сетях Direct Connect происходит напрямую с компьютера пользователя. Хаб является только


2.4.8. Поиск файлов и папок

Из книги автора

2.4.8. Поиск файлов и папок Иногда случается пренеприятная ситуация — предположим, писали вы что-то, или рисовали, или еще чего делали, сохранили ваши достижения на жесткий диск и… начисто забыли, в какой папке результаты ваших трудов лежат-покоятся. Диск большой, папок


4.4. Поиск файлов и папок

Из книги автора

4.4. Поиск файлов и папок Для поиска файлов нажмите <Win>+<F> и введите имя файла или папки. Вместо имени можно ввести маску (см. ранее). Второй способ: нажмите кнопку Пуск и в поле Найти программы и файлы введите имя файла (папки) или маску. Вы увидите результаты поиска. На


Поиск с использованием подзапроса

Из книги автора

Поиск с использованием подзапроса Использование существующих предикатов в подзапросах- особенно предиката EXISTS О- обсуждалось в главе 21. Подзапросы могут также быть использованы другими способами в предикатах условий поиска в предложениях WHERE и


Поиск на научных сайтах с использованием платформы Flexum «Поиск по научным сайтам»

Из книги автора

Поиск на научных сайтах с использованием платформы Flexum «Поиск по научным сайтам» Тема научного поиска не прошла мимо разработчиков персональных поисковиков. Подробному рассказу о возможностях таких поисковых систем посвящена отдельная глава нашей книги (см. главу 6).