Глобальный контекст.СтрНайтиВсеПоРегулярномуВыражению

Методы · StrFindAllByRegularExpression

Находит все вхождения регулярного выражения в исходной строке.

Синтаксис

СтрНайтиВсеПоРегулярномуВыражению(<Строка>, <РегулярноеВыражение>, <ИгнорироватьРегистр>, <МногострочныйПоиск>)
Полное описание, параметры и ограничения

Глобальный контекст.СтрНайтиВсеПоРегулярномуВыражению (Global context.StrFindAllByRegularExpression)

Глобальный контекст (Global context)

СтрНайтиВсеПоРегулярномуВыражению (StrFindAllByRegularExpression)

Доступен, начиная с версии 8.3.23.

Синтаксис:
СтрНайтиВсеПоРегулярномуВыражению(<Строка>, <РегулярноеВыражение>, <ИгнорироватьРегистр>, <МногострочныйПоиск>)
Параметры:

<Строка> (обязательный)
Тип: Строка.
Исходная строка.

<РегулярноеВыражение> (обязательный)
Тип: Строка.
Регулярное выражение.

<ИгнорироватьРегистр> (необязательный)
Тип: Булево.
Истина - без учета регистра, Ложь - с учетом регистра.
Значение по умолчанию: Ложь.

<МногострочныйПоиск> (необязательный)
Тип: Булево.
Истина - выполняется многострочный поиск: символу "^" в шаблоне регулярного выражения соответствует начало каждой строки значения параметра <Строка>, символу "$" - конец каждой строки.

Ложь - символу "^" в шаблоне регулярного выражения соответствует начало значения в параметре <Строка>, символу "$" - конец текста.
Значение по умолчанию: Ложь.
Возвращаемое значение:
Тип: Массив.
Массив элементов типа РезультатПоискаПоРегулярномуВыражению.
Описание:

Находит все вхождения регулярного выражения в исходной строке.

Доступность:

Сервер, толстый клиент, внешнее соединение.

Использование в версии:

Доступен, начиная с версии 8.3.23.

Описание изменено в версии 8.3.26.

Методическая информация

Практические примеры

Извлечь артикулы из текста и разобрать группы совпадения

Находим два кода в учебном тексте, выводим позиции и длины, затем читаем буквенную и цифровую группы первого кода.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Все исходные строки заданы прямо в примере; товары, файлы и настройки рабочих конфигураций не нужны.

  2. Выполняйте на сервере учебной базы. Особенно важно для встроенных функций регулярных выражений.


Текст = "Коды: AB-0042, CD-1000.";
Шаблон = "([A-Z]{2})-([0-9]{4})";
ВсеСовпадения = СтрНайтиВсеПоРегулярномуВыражению(Текст, Шаблон);
Для Каждого Совпадение Из ВсеСовпадения Цикл
    Сообщить(СтрШаблон("%1: начало %2, длина %3", Совпадение.Значение, Совпадение.НачальнаяПозиция, Совпадение.Длина));
КонецЦикла;
Первое = СтрНайтиПоРегулярномуВыражению(Текст, Шаблон);
Если Первое.НачальнаяПозиция = 0 Тогда
    ВызватьИсключение "Нет учебного кода в тексте";
КонецЕсли;
Для Каждого Группа Из Первое.ПолучитьГруппы() Цикл
    Если Группа.НачальнаяПозиция > 0 Тогда
        Сообщить(СтрШаблон("Группа: %1; начало %2; длина %3", Группа.Значение, Группа.НачальнаяПозиция, Группа.Длина));
    КонецЕсли;
КонецЦикла;
НеНайдено = СтрНайтиПоРегулярномуВыражению("Без кодов", Шаблон);
Сообщить(НеНайдено.НачальнаяПозиция = 0);

Разбор по шагам

  1. Поиск всех вхождений возвращает массив результатов, а не массив готовых строк.

  2. Свойства результата содержат значение, длину и начальную позицию в исходном тексте с 1.

  3. Круглые скобки в шаблоне создают группы. Обходим массив ПолучитьГруппы без предположения о специальных индексах.

  4. Отсутствие совпадения у одиночного поиска определяется НачальнаяПозиция=0, а не сравнением объекта с Неопределено.

Как проверить результат

  1. Совпадения AB-0042 и CD-1000: длина каждого 7, начала соответственно 7 и 16.

  2. Для первого кода группы содержат AB и 0042; ведущие нули цифровой группы сохранены как текст.

  3. Для Без кодов последняя проверка даёт Истина.

  4. Удалите коды из исходника: массив всех совпадений пуст, а проверка первого явно сообщает об отсутствии.

Ожидаемый результат

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

На что обратить внимание

  1. Не преобразуйте цифровую часть артикула в число без контракта: 0042 тогда станет 42.

  2. У необязательной группы может быть НачальнаяПозиция=0; её следует проверить до использования.

  3. Регулярные выражения не заменяют JSON/XML-парсер для структурированных документов.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.