Match и его возможности

AA> Нужно ОЧЕНЬ!
AA> ! Вот только, не слишком-ли бедный получится регэксп?
AA> ! Учитывая возможности MATCH от Клариона и возможности
AA> ! стандартного регэкспа?

AA> Это СТАНДАРТНЫЙ регэксп, именно его и хочется.
AA> Если тебя не затруднит, подскажи хотя бы, где копать.

Если уж так срочно, и умеешь нормально ориентироваться в асме, и знаешь хорошо ядро Клары, то загляни в код функции Cla$REGULAR. Вот ее надо переписать на Кларионе. Ничего сложного нет. Тем более, что ВСЮ работу по поиску выполняет экспортируемая функция _7RegExpr__find@… А тебе прийдется только написать код для инициализации и завершения. И взять результат из временного буфера, который этой функции и подсунешь.

Только вместо неэкспортируемой функции _7RegExpr__init@… надо исользовать экспортируемую функцию _7RegExpr__ct__@… Ну а как использовать функции работы с динамическими строками, я уже писал.

AA> Проблема всплыла — надо обрабатывать регулярные выражения в формате
AA> LEX/UNIX, которые в кларе реализованы в функции Match. Так вот, не знает ли
AA> кто способа получить НАЧАЛО и КОНЕЦ найденного совпадения (контекста) в
AA> режиме Match:Regular? Сильно надо, а писать самому обработчик регулярных
AA> выражений ой как не хочется…

Можно легко получить НАЧАЛО найденной последовательности:

  MAP
    MODULE('Clarion RTL')
      Regular(STRING _Str,STRING _Mask,BYTE _NoCase=True), |
              LONG,NAME('Cla$REGULAR'),dll(dll_mode)
    END
  END

  i# = Regular('abcd12345','[0-9]') ! Вернет 5

Если ОЧЕНЬ нужно, то, в принципе, можно получить и саму найденную последовательность. Только это более сложно и с небольшим «извратом». Правда, не выходящим за пределы экспортируемых функций ядра.

Вот только, не слишком-ли бедный получится регэксп? Учитывая возможности MATCH от Клариона и возможности стандартного регэкспа?