52 lines
1.6 KiB
C
52 lines
1.6 KiB
C
//#include <stdio.h>
|
|
#include <glib.h>
|
|
|
|
const gchar *params = "{lcrr@{...}l>{...}p{...}|l|c|r|r@{...}l|>{...}p{...}l|c|r|r@{...}l|>{...}p{...}||l||c||r||r@{...}l||>{...}p{...}|}";
|
|
|
|
int main (int argc, char *argv[])
|
|
{
|
|
/* Print all uppercase-only words. */
|
|
GRegex *regex;
|
|
GMatchInfo *match_info;
|
|
GError *error = NULL;
|
|
GList *list_params = NULL,
|
|
*it = NULL;
|
|
gchar *reverse_params = g_strdup (params);
|
|
reverse_params = g_strreverse (reverse_params);
|
|
|
|
regex = g_regex_new ("("
|
|
"(\\||)}[^{}]+{p}[^{}]+{>(\\||)"
|
|
"|"
|
|
"(\\||)l}[^{}]+{@r(\\||)"
|
|
"|"
|
|
"(\\||)r(\\||)"
|
|
"|"
|
|
"(\\||)c(\\||)"
|
|
"|"
|
|
"(\\||)l(\\||)"
|
|
")",
|
|
0, 0, NULL);
|
|
g_regex_match_full (regex, reverse_params, -1, 0, 0, &match_info, &error);
|
|
while (g_match_info_matches (match_info))
|
|
{
|
|
list_params = g_list_prepend (list_params, g_strreverse (g_match_info_fetch (match_info, 0)));
|
|
g_match_info_next (match_info, &error);
|
|
}
|
|
g_match_info_free (match_info);
|
|
g_regex_unref (regex);
|
|
if (error != NULL)
|
|
{
|
|
g_printerr ("Error while matching: %s\n", error->message);
|
|
g_error_free (error);
|
|
}
|
|
|
|
g_print ("%s\n", params);
|
|
for (it = g_list_first (list_params); it; it = g_list_next (it))
|
|
g_print ("Found: %s\n", (const gchar *) it->data);
|
|
|
|
g_free (reverse_params);
|
|
g_list_free_full (list_params, g_free);
|
|
|
|
return 0;
|
|
}
|