Рассмотрим один из видов парсинга html файлов при помощи регулярных выражений.
Регулярные выражения – это формальный язык поиска и осуществления манипуляций с подстроками в тексте.
Платформа 1С использует стандартные компоненты регулярных выражений Visual Basic, которые подключаются как COM объект (VBScript.RegExp).
Основные свойства объекта RegExp:
Global - Определяет продолжительность поиска (False – до первого совпадения, True – по всему тексту, значение по умолчанию: False)
IgnoreCase - Определяет чувствительность к регистру символов (False – учитывать регистр, True – не учитывать регистр, значение по умолчанию: False)
Multiline - Определяет структуру объекта (False – однострочный, True – многострочный , значение по умолчнанию: False)
Pattern - Строка, используемая как шаблон. Именно при помощи Pattern мы задаем маску для искомых фрагментов текста.
Таблица основных специальных символов (метасимволов) для создания шаблона:
^ Начало строки
$ Конец строки
? Ни одного или один любой символ
* Ни одного или несколько любых символов
+ Один или несколько любых символов
. Любой символ, кроме знака “новая строка”
– Определяет интервал символов
| Знак “или”
{n} Точное количество символов, стоящих перед {n}
{n,m} Количество от n до m символов, стоящих перед {n,m}
[abc] Любой из указанных символов
[^abc] Любой из неуказанных символов
[a-z] Любой символ из диапазона
[^a-z] Любой символ, не входящий в диапазон
\b Конец слова
\B Не конец слова
\d Цифра
\D Не цифра
\w Любая буква, цифра или знак подчеркивания
\W Не буква, не цифра и не знак подчеркивания
\s Пробел
\S Не пробел
Например.
<h2\b[^>]*>.+</h2>
Данный шаблон будет искать все заголовки 2го уровня, т.е. любой текст заключенный в html тэги <h2> и </h2>.
<[^>]*>
А данный шаблон просто ищет все что помещено в какие-либо html тэги.
Методы объекта RegExp:
Execute() - Возвращает коллекцию найденных по шаблону подстрок
Replace() - Возвращает строку, в которой найденные по шаблону вхождения в исходной строке заменены на указанную подстроку
Test() - Возвращает булево значение как результат проверки соответствия строки шаблону
Рассмотрим живой пример.
Прочитаем файл test.html и выведем из него все заголовки 2го уровня.
На 1С данный код будет выглядеть следующим образом:
//Указываем путь к файлу
    ВыбранныйФайл = "C:\test.html";                   
   
    ПрочитанныйТекст = Новый ЧтениеТекста(ВыбранныйФайл, КодировкаТекста.Системная);
    СтрокаТекстовогоФайла = ПрочитанныйТекст.ПрочитатьСтроку();
    //Создаем массив из строк файла;
    СчетчикСтрок = 0;
    МассивСтрок = Новый Массив;
    Пока Истина Цикл
        Строка = ПрочитанныйТекст.ПрочитатьСтроку();
        Если Строка = Неопределено Тогда
            Прервать;
        Иначе
            МассивСтрок.Добавить(Строка);
            СчетчикСтрок = СчетчикСтрок + 1;
        КонецЕсли;
    КонецЦикла;
    // Создаем COMОбъект для Регулярных выражений
    RegExp = Новый COMОбъект("VBScript.RegExp");
    RegExp.IgnoreCase = Истина;
    RegExp.Global = Истина;
    RegExp.Multiline = Истина;
   
    ПолученныеСовпадения = Новый Массив;
   
    //заголовки 2 уровня
    //Идем по строкам и ищем <h2...>...</h2>
    Для Каждого ПроверяемаяСтрока Из МассивСтрок Цикл       
       
        Шаблон = "<h2\b[^>]*>.+</h2>"; //Шаблон для поиска заголовка h2
        Шаблон2 = "<[^>]*>"; //Шаблон для удаления тэгов <h2> из найденного заголовка
        RegExp.Pattern = Шаблон;
       
        Matches=RegExp.Execute(ПроверяемаяСтрока);   
        Если Не RegExp.Test(ПроверяемаяСтрока) Тогда
            Продолжить
        Иначе                
            Для n = 0 По Matches.Count()-1 Цикл
                Match = Matches.Item(n);
                стр = (Match.Value);
                RegExp.Pattern = Шаблон2;
                Заголовок2Уровня = RegExp.Replace(стр, "");
                ПолученныеСовпадения.Добавить(Заголовок2Уровня);
            КонецЦикла;
        КонецЕсли;           
    КонецЦикла;
   
    Для Каждого Значение Из ПолученныеСовпадения Цикл
        Сообщить(Значение)
    КонецЦикла;
Рассмотрим подробнее, что мы сделали. После того как мы указали путь к файлу, мы считываем его построчно. Проходим циклом все строки и записываем каждую в массив (МассивСтрок).
Затем подключаем COM объект VBScript.RegExp, задаем свойства и идем уже по массиву строк, ищем совпадения по шаблону 1 и в случае нахождения совпадения – удаляем html тэги по шаблону 2.