我試圖在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