strstrU

Ищет нечётко определённые конструкции (с подстановочными знаками) в переданном массиве данных.

char* strstrU(
    const char *string,
    const char *strCharSet,
    size_t *SbsLen=0,
    USVARSSTRUCT **UsVars=0
);

Параметры

string
[вх]
Массив анализируемых данных.
strCharSet
[вх] Искомая приблизительная конструкция. Подробней в Заметках:
SbsLen
[вых] Не обязателен. Адрес переменной, принимающей длину найденного блока.
UsVars
[вых] Не обязателен. Адрес указателя на массив USVARSSTRUCT, в который будут помещены сведения о встреченных переменных из поискового запроса.
На вход должен подаваться адрес пустого указателя! Функция не модифицирует существующие блоки памяти.
Структура должна быть освобождена пользователем по ненадобности вызовом ReleaseUsUvars() для неё.

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

Указатель на начало первой найденной конструкции в массиве string
0 если ничего не найдено или произошла ошибка

Функция помещает код ошибки в глобальную Си переменную errno:
0  = Нет ошибок
7  = Слишком много подстановочных конструкций! число ? * и переменных не должно превышать 254 штуки!
8  = Не удалось интерпретировать значение strCharSet (запроса для поиска)
11 = Недопустимое имя переменной (см. strCharSet)
12 = Для выполнения недостаточно памяти (ОС отказала в выделении ОЗУ)
22 = Неправильные и/или  недопустимые значения аргументов функции.

Заметки

strCharSet допускает наличие спецсимволов, обозначающих как указание на неопределённые конструкции, так и непечатаемые символы. В целом передаваемая строка воспринимается следующим образом:
* подразумевает любое, включая нулевое число символов;
? - один любой символ;
%переменная% - работает аналогично *, но сохраняет данные о встреченной последовательности (в UsVars);
также особо обрабатываются непечатаемые символы: \\ - косая черта, \* - звёздочка, \? - знак вопроса, \% - знак процента, \t - табуляция, \n - перевод строки, \r - возврат каретки, \x?? - HEX код символа, а также более редкие \a \b \f \v \" \', смысл которых можно узнать в документации языка Си, все остальные пары передаются без изменений.

У функции есть ограничения: конструкции типа *? или %переменная%? и т. п. воспринимаются просто как ?, т. е. знак вопроса всегда должен предварять * или переменную.

Также:

Варианты сло*?во; сло*%1%во; сло?%1%?во и т.п. - создают неопределённость и наврядли дадут желаемое.
Поиск работает аналогично простой strstr, т. е. без разбора структуры данных (на примере XML функция в процессе работы не станет соблюдать правила вложенности тэгов)

Внимание!

Требует линковки с msvcrt! Имеет проблемы с современными компиляторами от Microsoft.

Быстрая справка

ОС Требует наличие стандартной библиотеки Си
DLL 2fapShare.dll
Библиотека 2fapShare.lib
Заголовок usearch.h

Смотри также

USVARSSTRUCT, strrepU, strnstr, memstr