Difference between revisions of "MatchRE"

From SunFlurry wiki
Jump to: navigation, search
1>Admin
 
m (1 revision imported)
 
(No difference)

Latest revision as of 15:55, 30 December 2023

  MatchRE, PosRE (Функции для работы с регулярными выражениями)
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Нет
Исключения:Невозможно превратить в строку, число, синтаксическая ошибка в шаблоне, неверный режим
Визуальность:Нет

Производит проверку шаблона регулярных выражений, заданного первым аргументом в тексте, заданным вторым аргументом. В зависимости от режима поиска может возвратить найденную позицию или ноль, список найденных значений (и значений групп поиска), либо таблицу позиций найденных значений (и значений групп поиска).

Синтаксис

MatchRE(<Выражение (STRING)>,<Строка, в которой происходит поиск (STRING)>,<Позиция начала поиска (INT)>=0,<Длина найденного (INT)>),<Режим поиска (INT)>=0,<Флаги поиска (INT)>=0):<Позиция, список или таблица (INT,LIST,TAB)>

Аргументы

  • <Выражение (STRING)> - Шаблон регулярного выражения для поиска.
  • <Строка, в которой происходит поиск (STRING)> - Текст поиска.
  • <Позиция начала поиска (INT)> - (необязательный аргумент) Позиция начала поиска (по умолчанию -- с начала текста).
  • <Длина найденного (INT)> - (необязательный аргумент) (возможен аргумент-переменная (ByRef)) Переменная, получающая длину найденного значения (только для режима поиска 0).
  • <Режим поиска (INT)> - (необязательный аргумент) Задает режим поиска и тип возвращаемых результатов. Возможны следующие значения:
    • 0 (по умолчанию): Поиск останавливается на первом найденном результате, функция возвращает его позицию в исходном тексте и его длину в переменной, заданной четвертым аргументом. Если результат не найден, функция возвращает ноль.
    • 1: Функция возвращает список, каждое значение которого является одним из найденных результатов.
    • 2: Функция возвращает таблицу со столбцами "Index" и "Length". В таблицу заносятся все позиции и длины найденных результатов.
    • 3: Функция возвращает список, каждое значение которого является одним из найденных результатов либо значением группы, имеющей индекс и результат (см. краткое описание в строковых функциях, а также описания стандартов регулярных выражений). Наименования списка будут пустыми для результатов, тогда как для значений групп содержать имя группы или номер группы (для групп без имен).
    • 4: Функция возвращает таблицу со столбцами "Index", "Length" и "GroupID", в которую занесены все позиции и длины найденных результатов и значенией групп, имеющих индекс и результат (см. краткое описание в строковых функциях, а также описания стандартов регулярных выражений). Столбец "GroupID" будет пустым для результатов, тогда как для значений групп содержать имя группы или номер группы (для групп без имен).
  • <Флаги поиска (INT)> - (необязательный аргумент) Число - битовая маска режимов поиска по умолчанию. Имеет следующие биты:
    • бит 0: Использовать регистро-независимый поиск (1), по умолчанию поиск будет регистро-зависимым. Важно: данный режим изменяет только сравнение обычного текста, сравнение наборов символов ([...]) изменено не будет.
    • бит 1: Не использовать конструкции проверки позиции $ и ^, для нахождения начала и конца строки внутри текста, а только для нахождения начала и конца всего текста. По-умолчанию режим отключен.

Возвращаемое значение

Функция возвращает число, список или таблицу в зависимости от режима.

Примеры

Стр:="This image has a resolution of 1440×900 pixels.";
аТб:=MatchRE("([0-9]+)×([0-9]+)",Стр,,,4);

iMatch:=0;
аТб.Select();
While аТб.Next() Do
  iMatch:=iMatch+IsEmpty(аТб.GroupID);
  Message(""+?(IsEmpty(аТб.GroupID),"Совпадение "+iMatch+": ","  Группа "+аТб.GroupID+": ")+?(аТб.Length=0,"(пустая строка с "+аТб.Index,Mid(Стр,аТб.Index,аТб.Length)+" (с "+аТб.Index+" по "+(аТб.Index+аТб.Length-1))+")");
EndDo;

//Будет выведено:
//Совпадение 1: 1440×900 (с 32 по 39)
//  Группа 1: 1440 (с 32 по 35)
//  Группа 2: 900 (с 37 по 39)