Поиск файлов с использованием рег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);
/************* Конец *********************************************/
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Копирование файлов с использованием стандартной библиотеки С
Копирование файлов с использованием стандартной библиотеки С Как видно из текста программы 1.1, стандартная библиотека С поддерживает объекты потоков ввода/вывода FILE, которые напоминают, несмотря на меньшую общность, объекты Windows HANDLE, представленные в программе
Копирование файлов с использованием Windows
Копирование файлов с использованием Windows В программе 1.2 решается та же задача копирования файлов, но делается это с помощью Windows API, а базовые приемы, стиль и соглашения, иллюстрируемые этой программой, будут использоваться на протяжении всей этой книги.Программа 1.2. cpW:
Копирование файлов с использованием вспомогательной функции Windows
Копирование файлов с использованием вспомогательной функции Windows Для повышения удобства работы в Windows предусмотрено множество вспомогательных функций (convenience functions), которые, объединяя в себе несколько других функций, обеспечивают выполнение часто встречающихся задач
Пример: последовательная обработка файлов с использованием метода отображения
Пример: последовательная обработка файлов с использованием метода отображения Программа atou (программа 2.4) иллюстрирует последовательную обработку файлов на примере преобразования ASCII-файлов к кодировке Unicode, приводящего к удвоению размера файла. Этот случай является
Пример: преобразование файлов с использованием перекрывающегося ввода/вывода и множественной буферизации
Пример: преобразование файлов с использованием перекрывающегося ввода/вывода и множественной буферизации Программа 2.4 (atou) осуществляла преобразование ASCII-файла к кодировке UNICODE путем последовательной обработки файла, а в главе 5 было показано, как выполнить такую же
Поиск на научных сайтах с использованием платформы Flexum «Поиск по научным сайтам»
Поиск на научных сайтах с использованием платформы Flexum «Поиск по научным сайтам» Тема научного поиска не прошла мимо разработчиков персональных поисковиков. Подробному рассказу о возможностях таких поисковых систем посвящена отдельная глава нашей книги (см. главу 6).
Поиск файлов на FTP-серверах
Поиск файлов на FTP-серверах FTP-серверы привлекательны тем, что обеспечивают возможность получать доступ непосредственно к файлам (без текстовой информации) и быстрее (чем по протоколу HTTP) загружать выбранные объекты на жесткий диск компьютера. Самое сложное в Интернете —
Поиск и закачка файлов
Поиск и закачка файлов Теперь, когда мы познакомились с окном программы DC++, следует приступить к поиску и закачке понравившихся файлов.Как уже упоминалось ранее, загрузка файлов в сетях Direct Connect происходит напрямую с компьютера пользователя. Хаб является только
10.1.34. Поиск файлов и каталогов
10.1.34. Поиск файлов и каталогов Ниже мы воспользовались стандартной библиотекой find.rb для написания метода, который находит один или более файлов и возвращает их список в виде массива. Первый параметр — это начальный каталог, второй — либо имя файла (строка), либо
Поиск с использованием подзапроса
Поиск с использованием подзапроса Использование существующих предикатов в подзапросах- особенно предиката EXISTS О- обсуждалось в главе 21. Подзапросы могут также быть использованы другими способами в предикатах условий поиска в предложениях WHERE и
Поиск в содержимом файлов
Поиск в содержимом файлов По умолчанию операционная система 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). Помощник поиска предложит вам выбрать категории файлов, которые вы хотите найти. Если вы не собираетесь
4.4. Поиск файлов и папок
4.4. Поиск файлов и папок Для поиска файлов нажмите <Win>+<F> и введите имя файла или папки. Вместо имени можно ввести маску (см. ранее). Второй способ: нажмите кнопку Пуск и в поле Найти программы и файлы введите имя файла (папки) или маску. Вы увидите результаты поиска. На
2.4.8. Поиск файлов и папок
2.4.8. Поиск файлов и папок Иногда случается пренеприятная ситуация — предположим, писали вы что-то, или рисовали, или еще чего делали, сохранили ваши достижения на жесткий диск и… начисто забыли, в какой папке результаты ваших трудов лежат-покоятся. Диск большой, папок