Sapforum.Biz

Инструменты => ABAP - Инструментальные средства => Тема начата: Uukrul от Май 06, 2022, 12:19:13 pm

Название: REGEXP - Примеры различных выражений
Отправлено: Uukrul от Май 06, 2022, 12:19:13 pm
В общем так как постоянно писать какие-то обработки текстов нет необходимости, то когда возникает проблема снова найти в тексте дату или еще какое-то значение, оптимальным вариантом является использование регулярных выражений, но как обычно? все забывается и потом снова теряешь пару часов, чтобы или вспомнить или найти, так как точно уже такое или сам делал или кто-то делал. Кстати с кто-то делал не всегда хорошо получается так как примеры часто могут быть под другие языки и не работать в ABAP.

Традиционное найти дату формата ДД.ММ.ГГГГ или ДД-ММ-ГГГГ (да, дата берется из диапазона 2000 по 2099):
Код: You are not allowed to view links. Register or Login
  DATA: l_moff TYPE sytabix,
        l_mlen TYPE sytabix.

* Find date in string
  FIND REGEX '(?:0?[1-9]|[12][0-9]|3[01])(?:.|-)(?:0?[1-9]|1[0-2])(?:.|-)(?:20[0-9][0-9])(?!\d)'
  IN iv_bktxt MATCH OFFSET l_moff
             MATCH LENGTH l_mlen.
  IF sy-subrc = 0. RV_date = iv_bktxt+l_moff(l_mlen). ENDIF.

Найти номер документа в строке, причем номер начинается с символа № потом идут цифры. Между символом номера могут быть пробелы а могут и небыть, но в результате пробелы между символом номера и самим номером убираются, возвращается что-то типа №1234:
Цитировать
  DATA: l_moff TYPE sytabix,
        l_mlen TYPE sytabix.

* Find number of document
  FIND REGEX '№+\s*(\d{1,})' IN iv_bktxt MATCH OFFSET l_moff
                                        MATCH LENGTH l_mlen.
  IF sy-subrc = 0.
    rv_number = iv_bktxt+l_moff(l_mlen).
    CONDENSE rv_number NO-GAPS.
  ENDIF.