我在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,我也想处理它。
我需要做的是以某种方式获取字符串中所有主题标签的数组,以使用它将所有标签包装在标签中。我该怎么办?
答案 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;
}
我不知道散列标记中哪些字符有效,但您可以随时根据需要调整正则表达式。重要的是使用回调来执行替换。