摘要:[ASP.NET]如何從一堆字字中將特定文字標記起來
可以在查詢Button的 Click 事件中處理
protected void Button1_Click(object sender, EventArgs e)
{
//摸擬從DB取出資料
string OriginalString = GetDBData();
//要查詢的關鍵字
string SearchString = TextBox1.Text;
//標註完關鍵字的字串
string ResultString = Regex.Replace(OriginalString, SearchString, (x) => string.Format("<span class='keyword'>{0}</span>", x.Value), RegexOptions.IgnoreCase);
Literal1.Text = ResultString;
}
private string GetDBData()
{
return @"(路透香港21日電)......";
}主要是使用System.Text.RegularExpressions命名空間下的Regex類別中的Replace方法
他多載多個方法
我選用的方法參數說明:
參數1:要「被」搜尋的字串
參數2:要搜尋的字串(關鍵字)
參數3:他是一個delegate要實作它,他會將找到符合的字用Match類別傳回給你處理,處理完後再將處理完的字串放回原本的位置,我在原字串的前後加上一個span html tag來套用CSS產生標記的效果
參數4:設定比對時忽略英文大小寫
<style type="text/css">
.keyword{ color:Blue; background-color:Gray;}
</style>註:如果要查詢類似的功能也許妳會使用 LIKE '%...%'之類的語法,但資料量大,文字多,這種的SQL語法非常的不好,正確的做法是將此欄位設定成全文檢索索引,效能會比使用 LIKE 來的快許多
補充:
delegate的從1.0開始就有了,只是每一代的寫法一直演化,所以列一下好了~順便練習一下
//.net 3.5 Lambda Expression
string ResultString = Regex.Replace(OriginalString, SearchString,
(x) => string.Format("<span class='keyword'>{0}</span>", x.Value), RegexOptions.IgnoreCase);
//.net 1.0 要另外實作獨立的方法(最下面)
MatchEvaluator me = new MatchEvaluator(MatchMethod);
string ResultString1 = Regex.Replace(OriginalString, SearchString, me, RegexOptions.IgnoreCase);
//.net 2.0 可以直接指定方法名稱了
string ResultString2 = Regex.Replace(OriginalString, SearchString, MatchMethod, RegexOptions.IgnoreCase);
//.net 2.0 推出的匿名函式
string ResultString3 = Regex.Replace(OriginalString, SearchString,
delegate(Match target) { return string.Format("<span class='keyword'>{0}</span>", target.Value); }, RegexOptions.IgnoreCase);
/////////////////////////////
//.net 1.0
public string MatchMethod(Match target)
{
return string.Format("<span class='keyword'>{0}</span>", target.Value);
}

