在文章產生時,現在要建立一個動態標籤替換,用Regex操作方法
1.在模板檔案裡面有newslist_1_12 文章列表標籤 要提取這個列表的參數12 是列表行數 1是所屬分類編號
現在要新聞列表10行分類為52編號的列表,其替換標籤是 newslist_52_10 (這樣子可以明白吧)
2.分析思路
a.把模板裡面的@"newslist_/d{1,2}_/d{1,2}" 提取出來,變成字串數組
b.把字串數組裡面的參數提取出來
c.提取的參數操作資料庫產生HTML代碼
public void getNewlList()
{
rxx = new System.Text.RegularExpressions.Regex(@"NewsList_(?<PID>(\d{1,2}))_(?<Num>(\d{1,2}))",
RegexOptions.Compiled|RegexOptions.IgnoreCase);
string input = Console.ReadLine();
if (input == "Q")
{
return;
}
Console.WriteLine("字串長度:" + input.Length);
System.Text.RegularExpressions.MatchCollection m;
m = rxx.Matches(input);
Console.WriteLine(m.Count);
for (int i = 0; i < m.Count; i++)
{
//再次提取已經Regex分組後的字串
Console.WriteLine(m[i].Result("分類:${PID}\t行數:${Num}"));
}
//單個提模數式
// print(rxx.Match(input).Result("${PID}${Num}") + "分類編號", true);
getNewlList();
}
附:微軟MSDN解釋
反向引用提供尋找重複字元組的方便的方法。它們可被認為是再次匹配同一個字串的快捷指令。
例如,若要尋找重複且相鄰的字元(如單詞“tall”中的兩個 L),可以使用Regex (?<char>\w)\k<char>,該Regex使用元字元 \w 來尋找任何單個單詞的字元。分組構造 (?<char> ) 將元字元括在其中,以強制Regex引擎記住子運算式匹配(在此樣本中將是任意單個字元),並以名稱“char”儲存它。反向引用構造 \k<char> 使引擎對當前字元和以名稱“char”儲存的先前匹配字元進行比較。只要單個字元與其前面的字元相同,整個Regex就可以找到一個匹配。
要找到重複的全字,您可以修改該分組子運算式,以搜尋前面是空格的任何字元組,而不是只搜尋任意單個字元。可以用匹配任何字元組的子運算式 \w+ 替換元字元 \w,並使用元字元 \s 匹配字元分組前的空格。這就產生了Regex (?<char>\s\w+)\k<char>,該Regex尋找任何重複的全字(例如“the the”),但也會匹配指定字串的其他重複情況,例如片語“the theory”中的重複情況。
為驗證上述第二種匹配是以單詞為邊界的,可以將元字元 \b 添加到重複匹配的後面。所產生的Regex (?<char>\s\w+)\k<char>\b 只尋找重複的、前面有空格的全字。