Программный разбор текста. Регулярные выражения

Появилась задача разбора HTML текста внутри модуля 1С.


Попытался сделать посредством встроенных функций — получилось очень медленно. Функция СРЕД() в общем съедала до 90% времени, при том, что обработка одной страницы могла идти около минуты.

Задача была решена путем использования стандартной Windows библиотеки RegExp, которая очень быстро обрабатывает текст.

Данная библиотека доступна начиная c Windows 98

Информацию по тому, как составить регулярные выражения можно найти в викиучебнике (Ссылка)

Инструмент = "ABBN";
СерверИсточник = "www.kase.kz";
Адрес = "/ru/news/issuer/"+Инструмент+"/";
ИмяФайла = КаталогВременныхФайлов()+"KASENEws.html";
HTTP = Новый HTTPСоединение(СерверИсточник);
HTTP.Получить(Адрес,ИмяФайла);
Сообщить(ИмяФайла);
АдресНовости = "";

ЧтениеТекста = Новый ЧтениеТекста;
ЧтениеТекста.Открыть(ИмяФайла,КодировкаТекста.UTF8);
Текст = ЧтениеТекста.Прочитать();
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.IgnoreCase = True;
RegExp.Global = True;
RegExp.MultiLine = True;

//Найти все теги, в нутри которых есть атрибут со значением "news"
RegExp.Pattern = "<[^>]*\""news\"">";
Matches=RegExp.Execute(Текст);
ЧислоВхождений = Matches.Count();
Если ЧислоВхождений > 0 Тогда
	МассивСтрок = Новый Массив;
	Для К = 0 ПО ЧислоВхождений-1 Цикл
		Match = Matches.Item(К);
		МассивСтрок.Добавить(Match.Value);
	КонецЦикла;
КонецЕсли;
МИд = Новый Массив;

//Вытащить все числа из строки
RegExp.Pattern = "[0-9]*";
Для К = 1 ПО МассивСтрок.Количество()-1 Цикл
	Matches = RegExp.Execute(МассивСтрок[К]);
	Коунт = Matches.count();
	Для Т = 0 По Коунт-1 Цикл
		Match = Matches.item(Т);
		Ид = Match.value;
		Если Ид <> "" Тогда
			МИд.Добавить(Ид);
		КонецЕсли;
	КонецЦикла;
КонецЦикла;
Для К = 0 ПО МИд.Количество()-1 Цикл
	АдресНовости = "/news/show/"+МИд[К];
	ИмяФайлаНовости = КаталогВременныхФайлов()+МИд[К]+".txt";
	Состояние("Получение "+АдресНовости);
	HTTP.Получить(АдресНовости,ИмяФайлаНовости);
	Сообщить(ИмяФайлаНовости);
КонецЦикла;
Метки: , , . Закладка Постоянная ссылка.