47 lines
1.3 KiB
C
47 lines
1.3 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;
|
||
|
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))
|
||
|
{
|
||
|
gchar *word = g_strreverse (g_match_info_fetch (match_info, 0));
|
||
|
g_print ("Found: %s\n", word);
|
||
|
g_free (word);
|
||
|
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_free (reverse_params);
|
||
|
|
||
|
return 0;
|
||
|
}
|