///要被正则的字符串:[oid:25000][pos:1001][m:120.5][time:2014-02-02 12:00:00]
///写一个正则表达式,要求:传来key值获取对应的value值.如:传来oid利用正在得到25000
string oid = CommRegEx.RegTest("[oid:25000][pos:1001][m:120.5][time:2014-02-02 12:00:00]", "oid");
string pos = CommRegEx.RegTest("[oid:25000][pos:1001][m:120.5][time:2014-02-02 12:00:00]", "pos");
public class CommRegEx
{
#region 正则解析字符串根据key获取value值
/// <summary>
/// 正则解析字符串根据key获取value值
/// </summary>
/// <param name="inputstring"></param>
/// <param name="strkey"></param>
/// <returns></returns>
public static string RegTest(string inputstring, string strkey)
{
//C#正则的声明,注:C#转义为双反斜杠\\
Regex reg = new Regex(@"\[" + strkey + ":(?'val'[^\\]]*)\\]", RegexOptions.IgnoreCase);
//?'val'是给[^\\]]*匹配到的结果起别名,后面可以利用m.Groups["别名"].Value来获取匹配到的值。?''是起别名的方式 这里别名起为 val
//需要重视的是:分组Groups必须在正则表达式上加括号 (),如上面的 : [ ^\] ]* 必须要加括号---> : ( [ ^\] ]*)这样分号后面的才能以组的形势访问。
Match m = reg.Match(inputstring);
string result = string.Empty;
if (m.Success)
{
result = m.Groups["val"].Value;
//本身正则表达式应是Regex reg = new Regex(@"\[" + strkey + ":([^\\]]*)\\]", RegexOptions.IgnoreCase);
// ([]*) 中括号里想匹配的是 非右中括号 即^] 因为中括号需要转义 故 \\] 所以总体为 ([^\\]]*)
//这样匹配的类似结果是:[oid:34223]
//m.Groups[index]本可以通过索引访问,索引为0是键值(即oid) ,索引为1是value值(即34223)也就是我们想要获取的值
//这里用?''起了别名故可以通过m.Groups["别名"]的方式获取。
}
return result;
}
#endregion
}