﻿id	summary	reporter	owner	description	type	status	priority	component	resolution	keywords	cc
1300	РЭ: поддержка регулярных выражений PCRE2 платами VE-01/VE-02	alx	Vladimir	"Ранее платы VE-01/VE-02 использовали регулярные выражения PCRE (реализованные библиотекой libpcre). Теперь платам VE-01/VE-02 добавлена поддержка более современных регулярных выражений PCRE2 (реализованных библиотекой libpcre2). PCRE2 имеет ряд полезных возможностей, например условная подстановка, благодаря которой можно одним регулярным выражением с заменой выполнять разные подстановки в зависимости от исходного номера:

 `/^1(?:(222)|(333)|(444))$/89${1:+777}${2:+666}${3:+555}` (см. в [https://regex101.com/r/tNULKo/1 regex101]). 

К сожалению, синтаксис регулярных выражений PCRE2 не полностью обратно совместим с PCRE. Основное из заметных пользователям отличий - другой синтаксис ссылок на группы захвата в строках замены: вместо комбинаций ""бэкслеш-цифра"" (`\1`, `\2`, `\3` и т.д.) PCRE2 в строке замены использует комбинации ""доллар-число"" (`$1`, `$2`, `$3` и т.д.). Кроме этого PCRE2 более строго чем PCRE контролирует синтаксис регулярных выражений, в результате чего в очень редких случаях регулярное выражение, работавшее в PCRE, может не работать в PCRE2.

Для обеспечения обратной совместимости с уже существующими конфигурациями в платах VE-01 и VE-02 сохранена поддержка регулярных выражений PCRE (библиотека libpcre). Выбор используемой библиотеки выполняется автоматически для каждого регулярного выражения по следующим правилам:
- если регулярное выражение не компилируется PCRE2 (libpcre2 возвращает ошибку) - используется PCRE (libpcre);
- если используется регулярное выражение с заменой, и в строке замены имеются ссылки со ""старым"" синтаксисом (`\1`, `\2`, `\3` и т.д.) - используется PCRE (libpcre);
- во всех остальных случаях используется PCRE2 (libpcre2).

Дополнительно введен глобальный конфигурационный параметр ""Режим PCRE"", позволяющий принудительно установить использование только PCRE или только PCRE2. Параметр  ""Режим PCRE"" может принимать одно из следующих значений:
 - **авто** (значение по умолчанию) - выбор PCRE или PCRE2 выполняется автоматически по описанным выше правилам;
 - **PCRE** - всегда используется PCRE (libpcre);
 - **PCRE2** - всегда используется PCRE2 (libpcre2).
Этот новый конфигурационный параметр находится на вкладке ""Разное"" диалога конфигурации плат VE-01/VE-02:

[[Image(ss1.jpg, width=100%)]]

Для удобства пользователей в веб-интерфейсе блока MC04-DSL-3U во всех полях ввода регулярных выражений и/или строк замены (подстановки) плат VE-01/VE-02 выполняется контроль синтаксиса ""на лету"" (то есть прямо в процессе ввода). Если в регулярном выражении обнаружена ошибка, то все регулярное выражение или его часть (от места обнаружения ошибки и до конца выражения) выделяется светло-красным фоном. Если навести курсор на такое выделение, появляется сообщение с описанием ошибки:

[[Image(ss2.jpg)]]

Если параметр ""Режим PCRE"" не установлен в значение ""PCRE"", в строках замены ищутся ссылки на группы захвата в ""старом"" стиле (`\1`, `\2` и т.д.). Если такая ссылка обнаруживается, то в режиме ""авто"" она выделяется желтым фоном (давая понять пользователю, что из-за этой ссылки будет использоваться PCRE вместо PCRE2), а в режиме ""PCRE2"" она выделяется светло-красным фоном (давая понять пользователю, что здесь, вероятно, ошибка).

**Предлагаю** в РЭ аппаратуры MC04-DSL-3U:
- указать, что используются именно PCRE2 **с расширенной подстановкой** (потому что расширенная подстановка дает дополнительные возможности, как в приведенном выше примере), дать [https://www.pcre.org/current/doc/html/pcre2syntax.html вот эту ссылку] на описание синтаксиса;
- во всех описаниях и примерах строк замены заменить комбинации ""бэкслэш-цифра"" на ""доллар-цифра"";
- описать, при каких условиях для обратной совместимости с ранее сделанными настройками будет использоваться PCRE вместо PCRE2 (см. выше);
- описать новый конфигурационный параметр ""режим PCRE"";
- описать контроль синтаксиса регулярных выражений в веб-интерфейсе."	задача	closed	major	Руководство по эксплуатации	готово		san
