,因爲我喜歡的正則表達式,如果你在你的程序,你會用一個小的類來表示你的令牌做得更好經常這樣做一樣多。認爲這是一個粗略的草圖:
public class SamToken
{
public string Head { get; set; }
private readonly HashSet<string> properties;
public HashSet<string> Properties{
get{return properties; }
}
public SamToken() : this("") { }
public SamToken(string head)
{
Head = head;
properties = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
}
public void Add(params string[] newProperties)
{
if ((newProperties == null) || (newProperties.Length == 0))
return;
properties.UnionWith(newProperties);
}
public override string ToString()
{
return String.Format("{0}[{1}]", Head,
String.Join("|", Properties));
}
}
接下來,你可以使用函數從字符串解析一個道理,東西線中:
public static SamToken Parse(string str)
{
if (String.IsNullOrEmpty(str))
return null;
Match match = Regex.Match(str, @"^(\w*)\[([\w|]*)\]$");
if (!match.Success)
return null;
SamToken token = new SamToken(match.Groups[1].Value);
token.Add(match.Groups[2].Value.Split('|'));
return token;
}
有了這樣的事情,這將是容易添加屬性:
SamToken token = SamToken.Parse("span[hello|world]");
token.Add("style", "class");
string s = token.ToString();
正如你所看到的,我只放了幾分鐘,但你的代碼可以是更強大,更重要的是,可重複使用。每次您想要檢查或添加屬性時,都不必重寫該正則表達式。
小心張貼你得到的結果嗎? – Amarghosh 2010-07-13 14:07:04