Появилась задача разбора 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.Получить(АдресНовости,ИмяФайлаНовости);
Сообщить(ИмяФайлаНовости);
КонецЦикла;