Автор Тема: REGEXP - Примеры различных выражений  (Прочитано 59 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 786
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
В общем так как постоянно писать какие-то обработки текстов нет необходимости, то когда возникает проблема снова найти в тексте дату или еще какое-то значение, оптимальным вариантом является использование регулярных выражений, но как обычно? все забывается и потом снова теряешь пару часов, чтобы или вспомнить или найти, так как точно уже такое или сам делал или кто-то делал. Кстати с кто-то делал не всегда хорошо получается так как примеры часто могут быть под другие языки и не работать в 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.