Glob-style pattern matching

Glob-style pattern matching — Сравнение строк с шаблонами содержащими '*' (wildcard) and '?' (joker).

Краткое описание

#include <glib.h> GPatternSpec; GPatternSpec* g_pattern_spec_new (const gchar *pattern); void g_pattern_spec_free (GPatternSpec *pspec); gboolean g_pattern_spec_equal (GPatternSpec *pspec1, GPatternSpec *pspec2); gboolean g_pattern_match (GPatternSpec *pspec, guint string_length, const gchar *string, const gchar *string_reversed); gboolean g_pattern_match_string (GPatternSpec *pspec, const gchar *string); gboolean g_pattern_match_simple (const gchar *pattern, const gchar *string);

Описание

Функции g_pattern_match* сравнивают строки с шаблонами содержащими '*' и '?' символы с семантикой похожей на стандартную функцию glob(): '*' соответствует произвольной, возможно пустой, строке, '?' соответствует произвольному символу.

Помните что в отличие от glob(), символ '/' может соответствовать символу подстановки, диапазон символов '[...]', '*' , '?' не может быть отброшен для включения как литеры в шаблон.

Когда множество строк должны быть сопоставлены с одним и тем же шаблоном, лучше собрать шаблон в GPatternSpec используя g_pattern_spec_new() и используя g_pattern_match_string() вместо g_pattern_match_simple(). Это избавляет от лишних перекомпиляций шаблона.

Детали

GPatternSpec

typedef struct _GPatternSpec GPatternSpec;

GPatternSpec это 'скомпилированная' форма шаблона. Эта структура непрозрачна и её поля не должны использоваться непосредственно.


g_pattern_spec_new ()

GPatternSpec* g_pattern_spec_new (const gchar *pattern);

Компилирует шаблон в GPatternSpec.

pattern : строка в кодировке UTF-8 завершённая нулём.
Возвращает : вновь распределённая GPatternSpec.

g_pattern_spec_free ()

void g_pattern_spec_free (GPatternSpec *pspec);

Освобождает память распределённую для GPatternSpec.

pspec : GPatternSpec.

g_pattern_spec_equal ()

gboolean g_pattern_spec_equal (GPatternSpec *pspec1, GPatternSpec *pspec2);

Сравнивает две скомпилированных спецификации шаблона и возвращает соответствуют ли они одному набору строк.

pspec1 : GPatternSpec.
pspec2 : другая GPatternSpec.
Возвращает : Эквивалентны ли скомпилированные шаблоны.

g_pattern_match ()

gboolean g_pattern_match (GPatternSpec *pspec, guint string_length, const gchar *string, const gchar *string_reversed);

Сопоставляет строку с скомпилированным шаблоном. Помещение правильной длины данной строки обязательно. Переворачивание строки может быть пропущено помещением NULL, это более эффективно если перевёрнутая версия строки для соответствия не под рукой, та как g_pattern_match() создаст её только если скомпилированный шаблон запросит обратное соответсвие.

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

Помните так же что перевёрнутая строка в кодировке UTF-8 не может быть получена из g_strreverse(). Она работает только для строк не содержащих многобайтные символы. Glib предлагает функцию g_utf_strreverse() для переворачивания строк в кодировке UTF-8.

pspec : GPatternSpec.
string_length : длина string.
string : строка в кодировке UTF-8 для сопоставления.
string_reversed : перевёрнутая строка string или NULL.
Возвращает : TRUE если string соответствует pspec.

g_pattern_match_string ()

gboolean g_pattern_match_string (GPatternSpec *pspec, const gchar *string);

Сопоставляет строку с скомпилированным шаблоном. Если строка может соответствовать больше чем одному шаблону, рассмотрите использование g_pattern_match() вместо этой функции подставляя полностью перевёрнутую строку.

pspec : GPatternSpec.
string : строка в кодировке UTF-8 для сопоставления.
Возвращает : TRUE если string соответствует pspec.

g_pattern_match_simple ()

gboolean g_pattern_match_simple (const gchar *pattern, const gchar *string);

Сопоставляет строку с шаблоном полученным как строка. Если эта функция вызывается в цикле, более эффективно скомпилировать шаблон один раз с помощью g_pattern_spec_new() и вызвать g_pattern_match_string().

pattern : шаблон в кодировке UTF-8.
string : строка в кодировке UTF-8 для сопоставления.
Возвращает : TRUE если string соответствует pspec.