如何从Vala中的正则表达式中捕获的组中获取所有子串?

时间:2014-11-17 19:48:33

标签: regex vala

我在Vala中编写了一个使用正则表达式的应用程序。我需要做的是将所有主题标签包装在标签中的字符串中。而且我不太了解Vala中的正则表达式是如何运作的。

目前我正在尝试这样做:

Regex hashtagRegex = new Regex("(#[\\p{L}0-9_]+)[ #]");
MatchInfo info;

if (hashtagRegex.match_all_full(string, -1, 0, 0, out info))
{
    foreach(string hashTag in info.fetch_all())
        string = string.replace(hashTag, "<a href=\"" + hashTag + "\">" + hashTag + "</a>");
}

但是它只解析第一个#标签和末尾的空格。

我在正则表达式的末尾使用[#],因为有些用户不会将空格标记用空格分开,只需编写一堆这样的主题标签:#hashtag1 #hashtag2 #hashtag3,我也想处理它。

我需要做的是以某种方式获取字符串中所有主题标签的数组,以使用它将所有标签包装在标签中。我该怎么办?

1 个答案:

答案 0 :(得分:3)

  

我需要做的是以某种方式获取字符串中所有主题标签的数组,以使用它将所有标签包装在标签中。我该怎么办?

不,不是。

尝试这样的事情:

private static int main (string[] args) {
    try {
        GLib.Regex hashtagRegex = new GLib.Regex ("#([a-zA-Z0-9_\\-]+)");
        string res = hashtagRegex.replace_eval ("foo #bar baz #qux qoo", -1, 0, 0, (mi, s) => {
                s.append_printf ("<a href=\"%s\">%s</a>", mi.fetch (1), mi.fetch (0));
                return false;
            });
        GLib.message (res);
    } catch (GLib.Error e) {
        GLib.error (e.message);
    }

    return 0;
}

我不知道散列标记中哪些字符有效,但您可以随时根据需要调整正则表达式。重要的是使用回调来执行替换。