Справочное описание GLib | ||||
---|---|---|---|---|
Glob-style pattern matchingGlob-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()
.
Это избавляет от лишних перекомпиляций шаблона.
typedef struct _GPatternSpec GPatternSpec;
GPatternSpec это 'скомпилированная' форма шаблона. Эта структура непрозрачна и её поля не должны использоваться непосредственно.
GPatternSpec* g_pattern_spec_new (const gchar *pattern);
Компилирует шаблон в GPatternSpec.
pattern : |
строка в кодировке UTF-8 завершённая нулём. |
Возвращает : | вновь распределённая GPatternSpec. |
void g_pattern_spec_free (GPatternSpec *pspec);
Освобождает память распределённую для GPatternSpec.
pspec : |
GPatternSpec. |
gboolean g_pattern_spec_equal (GPatternSpec *pspec1,
GPatternSpec *pspec2);
Сравнивает две скомпилированных спецификации шаблона и возвращает соответствуют ли они одному набору строк.
pspec1 : |
GPatternSpec. |
pspec2 : |
другая GPatternSpec. |
Возвращает : | Эквивалентны ли скомпилированные шаблоны. |
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 .
|
gboolean g_pattern_match_string (GPatternSpec *pspec,
const gchar *string);
Сопоставляет строку с скомпилированным шаблоном. Если строка может соответствовать больше чем одному шаблону, рассмотрите использование
g_pattern_match()
вместо этой функции
подставляя полностью перевёрнутую строку.
pspec : |
GPatternSpec. |
string : |
строка в кодировке UTF-8 для сопоставления. |
Возвращает : |
TRUE если string
соответствует pspec .
|
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 .
|