//#include #include 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; }