| Справочное описание 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.
|