Windows Script Host для Windows 2000/XP - Андрей Попов
Шрифт:
Интервал:
Закладка:
Таблица 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 Граница слова, С‚.Рµ. позиция между словом Рё пробелом. Например, выражению erb соответствует СЃРёРјРІРѕР» "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+ " n";
}
В конце функции FindFilesInFolder(Fold, RegEx) на экран выводятся имена найденных файлов и их общее количество:
SItog="Найдено файлов: "+ColFind;
//Выводим на экран имена и количество найденных файлов
WScript.Echo(SFileNames+SItog);
Листинг 5.18. Поиск файлов, имена которых соответствуют регулярному выражению/*******************************************************************/
/* РРјСЏ: FindRegExp.jsВ В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В В */