RDT1C/DataProcessors/ирПлатформа/Templates/V8RegEx_Описание/Ext/Template/ru.html
2016-12-04 00:14:16 +03:00

129 lines
17 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="__STYLE__"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16476"></meta></head><body>
<h1>REX</h1>
<blockquote>
<ul><li>Видишь суслика?
</li><li>Нет.
</li><li>И я не вижу. А он - есть. (с) ДМБ</li></ul></blockquote>
<p>Для работы с юникодом V8 использует кроссплатформенную библиотеку ICU, которая помимо прочего, содержит и функционал по работе с регулярными выражениями. По какой-то неизвестной причине, 1С не "вытащила" этот функционал "наружу", и пользоваться им из языка 1С возможности нет.</p>
<p>Однако, как всегда, на помощь приходят ВК.</p>
<p>Представляю свою разработку, которая строит "мостик" из библиотеки ICU в язык 1С. Она может работать и как Native ВК, и как аддин к Снегопату.</p>
<p>Разработка выполнена по технологии "real native", т.е. не просто нативная по терминологии 1С, а использует "родные" методы движка 1С и притворяется штатным объектом 1С. (В семерке так работали 1С++, Rainbow и пр.)</p>
<p>Работа проверялась в толстом и тонком клиенте, и на серверах 32 и 64 бит. Поддерживаются релизы 8.2, 8.3.</p>
<p>Для работы в релизах 8.2 младше 14ого, необходимо скопировать в папку <code>bin</code> файлы <code>icuXXX46.dll</code> из каталогов <code>bin</code> более старших релизов 1С.</p>
<p>Подробнее о регулярных выражениях в ICU можно посмотреть <a href="http://userguide.icu-project.org/strings/regexp">здесь</a>. Если сравнивать их с обычно используемыми <code>VBScript.RegExp</code> - регулярки от ICU более мощные, правильные, и всегда есть вместе с 1С.</p>
<p>В поставку входит два файла:</p>
<ul><li>rex32.dll - для работы в 32-битных клиентах
</li><li>rex64.dll - для работы в 64-битном сервере</li></ul><h2>Подключение компоненты</h2>
<p>Компонента загружается так:</p>
<p>В 1С-Предприятии:</p><pre><code>ПодключитьВнешнююКомпоненту("путь\rexXX.dll", "RegEx", ТипВнешнейКомпоненты.Native);
</code></pre>
<p>В Снегопате подключается как аддин - dll. Впишите в addins.ini строку</p><pre><code>dll:путь к rex32.dll
</code></pre>
<h2>Объект V8RegEx</h2>
<p>Представляет регулярное выражение и служит для применения подготовленного регулярного выражения. Сначала объекту либо через конструктор, либо через свойство <code>Шаблон</code> задается регулярное выражения, затем с помощью различных методов это выражение может неоднократно применятся к различным текстам.</p>
<h3>Создание объекта для работы</h3>
<p>После подключения компоненты можно создавать объекты для работы.</p>
<p>В 1С-Предприятии это делается так:</p><pre><code>ре = Новый("V8RegEx", [Шаблон]);
</code></pre>
<p>Параметры:</p>
<ul><li>
<p>[Шаблон] - необязательный параметр, массив с одним элементом - строкой регулярного выражения.</p><pre><code>Шаблон = Новый Массив(1);
Шаблон[0] = "регулярное выражение";
</code></pre></li></ul><p>В Снегопате объект создается через v8New:</p><pre><code>re = v8New("V8RegEx", [Шаблон]);
</code></pre>
<p>Параметры:</p>
<ul><li>[Шаблон] - необязательный параметр, Строка, регулярное выражение.</li></ul><h3>Свойство Шаблон / Pattern</h3>
<p>Чтение и запись. Строка. Содержит регулярное выражение.</p>
<p>При присвоении свойства компонента проверяет и компилирует регулярное выражение. В случае ошибки компиляции генерируется исключение с описанием ошибки. Компонента внутри ведет кэш регулярных выражений, поэтому присвоении недавно использовавшихся шаблонов не приведет к их повторной компиляции.</p>
<h3>Методы Совпадает, Начинается, Содержит, Найти</h3>
<p>Это группа методов для анализа текста регулярным выражением. Их английские названия соответственно Matches, LookingAt, Contain, Find.</p>
<ul><li><code>Совпадает / Matches</code> - проверяет строку на полное совпадение с регулярным выражением.
</li><li><code>Начинается / LookingAt</code> - проверяет, что начало строки совпадает с регулярным выражением.
</li><li><code>Содержит / Contain</code> - проверяет, что часть строки совпадает с регулярным выражением.
</li><li><code>Найти / Find</code> - находит в строке все совпадения с регулярным выражением.</li></ul><p><strong>Синтаксис:</strong></p><pre><code>результат = объект.ИмяМетода(Текст, [НачальныйИндекс])
</code></pre>
<p><strong>Параметры:</strong></p>
<ul><li>Текст. Строка. Обязательный параметр. Содержит анализиремый текст.
</li><li>[НачальныйИндекс]. Число. Необязательный параметр. По-умолчанию 0. Содержит стартовую позицию, начиная с которой надо анализировать текст. Нумерация позиций в отличии от 1С начинается с <strong>0</strong>. </li></ul><p><strong>Возвращают:</strong></p>
<p>Если анализ успешен, возвращают объект <code>ДеревоЗначений</code>, содержащий три колонки:</p>
<ul><li>Текст / Value. Текст совпадения.
</li><li>Начало / FirstIndex. Начальная позиция совпадения в исходной строке.
</li><li>Длина / Length. Длина совпадения.</li></ul><p>Строки первого уровня дерева значений содержат информацию о всём совпадении, подстроки каждой строки содержат информацию о захваченных группах.</p>
<h3>Метод Разделить / Split</h3>
<p>Разделяет исходную строку на части, используя как разделитель заданное регулярное выражение.</p>
<p><strong>Синтаксис:</strong></p><pre><code>результат = объект.Разделить(ИсходнаяСтрока);
</code></pre>
<p><strong>Параметры:</strong></p>
<ul><li>ИсходнаяСтрока. Строка. Текст, котором необходимо разбить на части.</li></ul><p><strong>Возвращает:</strong> объект Массив. Содержит получившиеся строки.</p>
<h3>Метод Заменить / Replace</h3>
<p>Заменяет в исходной строке все вхождения регулярного выражения на СтрокаЗамены.</p>
<p><strong>Синтаксис:</strong></p><pre><code>результат = объект.Разделить(ИсходнаяСтрока, СтрокаЗамены);
</code></pre>
<p><strong>Параметры:</strong></p>
<ul><li>ИсходнаяСтрока. Строка. Текст, в котором необходимо выполнить замены.
</li><li>СтрокаЗамены. Строка. Текст, который будет вставляться в места замены.</li></ul><p><strong>Возвращает:</strong> результирующую строку.</p>
<p>В строке замены можно использовать ссылки на захваченные группы, как $n, где n - номер захваченной группы ($0 - все захваченное выражение).</p>
<h3>Совместимость с VBScript.Regexp</h3>
<p>Для упрощения перехода на новую компоненту, объект также поддерживает такой-же интерфейс, как и объект VBScript.Regexp. Это методы Exec, Test, а также свойства Multiline, Global, IgnoreCase.</p>
<h3>Метод Test / Проверить</h3>
<p>Проверяет строку на вхождение регулярного совпадения.</p>
<p><strong>Синтаксис:</strong></p><pre><code>результат = объект.Test(ПроверяемыйТекст);
</code></pre>
<p><strong>Параметры:</strong></p>
<ul><li>ПроверяемыйТекст. Строка. Текст для проверки.</li></ul><p><strong>Возвращает:</strong> Булево. Истина, если текст содержит вхожение, иначе Ложь. По действию аналогичен методу Содержит, но не возвращает информацию о вхождении.</p>
<h3>Метод Execute / Выполнить</h3>
<p>Находит в исходной строке совпадения с регулярным выражением.</p>
<p><strong>Синтаксис:</strong></p><pre><code>результат = объект.Execute(ПроверяемыйТекст);
</code></pre>
<p><strong>Параметры:</strong></p>
<ul><li>ПроверяемыйТекст. Строка. Текст для проверки.</li></ul><p><strong>Возвращает:</strong> Объект RegExMatches. Объект совместим по интерфейсу с результатом выполнения метода Execute объектом VBScript.Regexp. Поддерживает как обход "Для Каждого", так и доступ методом Item(Индекс). Содержит свойство Count и метод Count(), так как исходный объект так же поддерживает это свойство и метод.</p>
<p>Если свойство Global установлено в Истина, находит все вхождения, иначе - только первое.</p>
<h3>Свойство Global / Глобальный</h3>
<p>Чтение и запись. Булево. Влияет на метод Execute и Replace. При установке в Истина метод будет искать либо заменять все вхождения, иначе только первое.</p>
<h3>Свойство Multilie / Многострочный</h3>
<p>Чтение и запись. Булево. Влияет на все методы. При установке в Истина в начало регулярного выражения добавляется флаг (?m).</p>
<h3>Свойство IgnoreCase / НеУчитыватьРегистр</h3>
<p>Чтение и запись. Булево. Влияет на все методы. При установке в Истина в начало регулярного выражения добавляется флаг (?i).</p>
<h2>Объект RegExMatches</h2>
<p>Служит для возращения результата методом Execute, для совместимости с интерфейсом результата этого метода в VBScript.Regexp.</p>
<p>Представляет из себя коллекцию объектов <code>RegExMatch</code>, поддерживает обход <code>Для Каждого</code> и доступ к любому элементу через его индекс оператором <code>[]</code> (нумерация с 0).</p>
<h3>Свойство Count / Количество</h3>
<p>Только чтение. Число. Содержит количество элементов в коллекции.</p>
<h3>Метод Count / Количество.</h3>
<p>Возвращает количество элементов в коллекции.</p>
<p><strong>Синтаксис:</strong></p><pre><code>к = результат.Количество();
</code></pre>
<p><strong>Возвращает:</strong> Число. Количество элементов в коллекции.</p>
<p>Коллекция имеет и метод, и свойство Count для совместимости со старым кодом.</p>
<h3>Метод Item / Получить</h3>
<p>Служит для получения элемента коллекции по его индексу.</p>
<p><strong>Синтаксис:</strong></p><pre><code>элемент = результат.Item(Индекс);
</code></pre>
<p><strong>Параметры:</strong></p>
<ul><li>Индекс. Число. Номер элемента в коллекции, начиная с 0.</li></ul><p><strong>Возвращает:</strong> объект RegExMatch, элемент коллекции.</p>
<h2>Объект RegExMatch</h2>
<p>Представляет один из результатов применения регулярного выражения методом Execute.</p>
<h3>Свойство Value / Текст</h3>
<p>Только чтение. Строка. Содержит текст всего совпадения с регулярным выражением.</p>
<h3>Свойство FirstIndex / Начало</h3>
<p>Только чтение. Число. Содержит позицию начала совпадения в исходном тексте. Нумерация позиций начинается с 0.</p>
<h3>Свойство Length / Длина</h3>
<p>Только чтение. Число. Содержит длину совпадения.</p>
<h3>Свойство SubMatches / Подгруппы</h3>
<p>Только чтение. Объект RegExSubMatches, коллекция строк - захваченных групп.</p>
<h2>Объект RegExSubMatches</h2>
<p>Содержит коллекцию строк - захваченных групп регулярного выражения. Поддерживает обход <code>Для Каждого</code> и доступ к любому элементу через его индекс оператором <code>[]</code> (нумерация с 0).</p>
<h3>Свойство Count / Количество</h3>
<p>Только чтение. Число. Содержит количество элементов в коллекции.</p>
<h3>Метод Count / Количество.</h3>
<p>Возвращает количество элементов в коллекции.</p>
<p><strong>Синтаксис:</strong></p><pre><code>к = результат.Количество();
</code></pre>
<p><strong>Возвращает:</strong> Число. Количество элементов в коллекции.</p>
<p>Коллекция имеет и метод, и свойство Count для совместимости со старым кодом.</p>
<h3>Метод Item / Получить</h3>
<p>Служит для получения элемента коллекции по его индексу.</p>
<p><strong>Синтаксис:</strong></p><pre><code>элемент = результат.Item(Индекс);
</code></pre>
<p><strong>Параметры:</strong></p>
<ul><li>Индекс. Число. Номер элемента в коллекции, начиная с 0.</li></ul><p><strong>Возвращает:</strong> Строка, элемент коллекции, текст захваченной группы.</p></body></html>