我试图在web应用中实现hashtag函数,以便轻松地将搜索链接嵌入到页面中。问题是我试图对散列标记进行替换,因此它们不会出现在HTML输出中。由于我也希望能够在输出中使用散列标记,所以我不能只在处理结束时在整个字符串上执行最后的Replace
。我想要能够像\#1 is my answer
这样散列一些散列标记,并且我会找到并用#
代替\#
,但这是另一个我甚至还没准备好(但仍在考虑中)的问题。正则表达式替换字符串函数没有按预期工作
这是我迄今为止在一个控制台应用程序嘲笑起来,
static void Main(string[] args)
{
Regex _regex = new Regex(@"(#([a-z0-9]+))");
string link = _regex.Replace("<p>this is #my hash #tag.</p>", MakeLink("$1"));
}
public static string MakeLink(string tag)
{
return string.Format("<a href=\"/Search?t={0}\">{1}</a>", tag.Replace("#", ""), tag);
}
输出是:
<p>this is <a href="/Search?t=#my">#my</a> hash <a href="/Search?t=#tag">#tag</a>.</p>
但是,当我休息运行它,而它的运行MakeLink()
它的串在调试器输出中显示在"$1"
,并且不会按预期替换散列值。
有没有比正则表达式更好的工具工作?或者我可以做其他事情来正确地工作吗?
完美!!! MakeLink( “$ 2”)。这就是我想要的100%,'
'的预期/期望输出,这是my-tag散列tag。
' – 2011-03-18 14:48:31我还更新了正则表达式,在单词之间包含一个短划线,所以'(#([a-z0-9 \ - ] +))''。可能你对逃跑部分有任何想法,这样如果他们有像'我的\#1粉丝'这样的东西,它不会把'#1'变成链接? – 2011-03-18 14:50:44
我对此有点生疏,但我认为它被称为“消极lookbehind”,并且你正在寻找类似于(?<!\\\)的东西:((?<!\\\) )(注意:(a)我不确定这些括号是否是一个捕获组,在这种情况下,您需要使用$ 3而不是$ 2,并且(b)我不确定这是否适用于.NET。另外请注意,您将不得不用\#替换#。 – Rawling 2011-03-18 14:59:01