1. Руководство по встроенному языку
0

Приложение 2. Регулярные выражения во встроенном языке 1С:Предпритие 8.3

Официальная поддержка регулярных выражений появились на платформе 1С:Предприятие 8 начиная с версии 8.3.23. Они основаны на диалекте ICU регулярных выражений, применяемых в языке Perl, но расширены возможностями работы со строками Unicode.

К сожалению, используемый диалект языка не поддерживает именованные группы.

Для тех, кто не знаком или мало знаком с регулярными выражениями, давайте немного введу в курс дела. Регулярные выражения — это, своего рода, шаблоны для поиска определенных последовательностей в тексте (например, чисел, дат, номеров телефонов и т.п.). Эти шаблоны состоят из обычных символов (которые «ищут» сами себя), метасимволов (которые управляют поиском) и групп таких символов.

В регулярных выражениях используются следующие метасимволы:

. означает любой символ, например:
к.мпания будет искать слова компания или кампания
[ ] символьный класс для поиска группы символов, например:
[abc] — будет искать один из трех символов a, b или c
Подробнее см. далее
| альтернативные символы или выражения, например:
Апр|Апрель — будет искать Апр или Апрель
( ) группировка выражений для использования альтернатив или квантификаторов (счетчиков повторения). Например:
Апр(ель)? — будет искать Апр или Апрель. Квантификатор ? означает одно или ни одного совпадения (см. далее)
^ выражение граничит с началом строки, например:
^From: — найдет все строки, начинающиеся с From:
$ выражение граничит с концом строки, например:
ция$ — найдет все строки, которые заканчиваются на ция
\b граница слова, например:
\bsun\b — найдет sun, но не sunny
\s любой пробельный символ (пробел, табуляция, перенос строки (Символы.ПС), возврат каретки (Символы.ВК)), например:
\s+ — будет искать пробел или любую последовательность «пустых» символов
\символ экранирует любой метасимвол, чтобы он означал сам себя, например
\. — будет искать точку

Почти все остальные символы (для краткости я привел не все метасимволы) означают сами себя.

Отдельно хочется выделить символьный класс — выражение в квадратных скобках. Чаще всего они используются для перечисления группы символов, которые могут (или не могут) находиться на определенном месте строки. Также он может использоваться для запоминания групп символов, которые можно использовать при формировании строки замены (см. пример для функции СтрЗаменитьПоРегулярномуВыражению())

Внутри символьного класса можно использовать следующие метасимволы:

- задает диапазон символов между которыми он находится, либо сам себя, если указан на первом месте. Например:
[0-9] будет искать цифру от 0 до 9 включительно
[-.] будет искать тире или точку
^ означает исключение, т.е. инвертирует указанные символы. Например:
[^0-9] будет искать любые символы, кроме цифр от 0 до 9 включительно

Все остальные символы обозначают сами себя.

Также есть еще квантификаторы — метасимволы, которые управляют количеством повторений символов и групп:

? С этим квантификатором вы уже знакомы — он указывает, что предыдущий символ или выражение являются необязательным. Например:
Апр(ель)? — будет искать Апр или Апрель
* указывает, что предыдущий символ или выражение являются необязательными, и могут появиться 0  более раз. Например:
<br *> — указывает на то, что пробел является необязательным, но может повторяться сколько угодно раз. Поэтому будут находиться следующие варианты тега: <br> <br >и т.д.
+ указывает, что предыдущий символ или выражение должны появиться хотя бы один раз, но не ограничены. Например:
<h1 +class="test"> — указывает на то, что пробел должен появиться хотя бы раз перед атрибутом class
{n} указывает точное количество совпадений предыдущего символа или выражения. Например:
[0-9]{2} — найдет все двухзначные последовательности чисел
{n,m} указывает минимальное и максимальное количество совпадений предыдущего символа или выражения. Например:
[0-9]{2,3} — найдет все двухзначные и трехзначные последовательности чисел

На самом деле в языке регулярных выражений есть намного больше разных фишек, с которыми Вам следует быть знакомыми. Для этого рекомендую прочитать одну из книг по регулярным выражениями, например эту: Регулярные выражения. Сборник рецептов (фрагмент)

Тестировать регулярные выражения можно в режиме онлайн, например: regex101.com или www.regexpal.com или других подобных. Просто вставляете произвольный текст и тренируетесь на нем составлять выражения.

Функции для работы с регулярными выражениями

Всего есть 4 функции, которые работают с регулярными выражениями во встроенном языке (не забывайте, что они доступны только на версии платформы 8.3.23+):

СтрНайтиПоРегулярномуВыражению() выполняет последовательный поиск строки, заданной регулярным выражением (для поиска обычного текста рекомендую использовать СтрНайти())
СтрЗаменитьПоРегулярномуВыражению() выполняет замену подстроки, заданной регулярным выражением произвольной фиксированной строкой
СтрПодобнаПоПоРегулярномуВыражению() проверяет соответствие строки шаблону, представленному регулярным выражением
СтрНайтиВсеПоРегулярномуВыражению() выполняет поиск всех вхождений строки, заданной регулярным выражением

Честно, не знаю почему новые методы решили назвать именно так: длинно и громоздко. Наверное, в фирме 1С у всех мониторы разрешением 2560 и выше. Почему нельзя было назвать, например, так: СтрНайтиРег(), СтрЗаменитьРег() и СтрПодобнаРег()!? Надеюсь, со временем одумаются и сделают по-человечески))

Материал дополняется…

Поделиться страницей в соц.сетях

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *