The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Каталог документации / Раздел "Программирование, языки" / Оглавление документа

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.



Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру