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