/// <summary> /// 占位符替换: ${}. /// ${TagName} 如果TagName找不到将保留${TagName}. /// "${Date} ${NotFoundTagName}" -> "2018-11-28 ${NotFoundTagName}" /// Created by Wagsn on 2018/11/28 11:29. /// </summary> /// <param name="template">模板字符串</param> /// <returns></returns> public static string ReplacePlaceholderByIgnore <TValue>(string template, SafeMap <TValue> pairs) { string result = new string(template.ToCharArray()); // 需要优化为,匹配到 \$\{\S*?\} 后按照匹配到的内容作为Key在Map中寻找Value替换 foreach (var key in pairs.Keys) { Regex regex = new Regex(@"\$\{" + key + @"\}"); // 如果Key也是正则表达式 result = regex.Replace(result, pairs[key].ToString()); result = regex.Replace(result, new MatchEvaluator(m => pairs.ContainsKey(key) ? pairs.UnSafeGet(key).ToString() : m.Groups[1].Value)); // ?? 这里的m. m.Groups[1] 难道指的是一个值,而不是所有匹配项 } return(result); }
/// <summary> /// 表达式解析 /// </summary> /// <param name="template"></param> /// <param name="pairs"></param> /// <returns></returns> public static string Parse(string template, SafeMap <object> pairs, ELOption option = default(ELOption)) { string result = new string(template.ToCharArray()); // 忽略不匹配项 if (option.Ignore) { // 需要优化为,匹配到 \$\{\S*?\} 后按照匹配到的内容作为Key在Map中寻找Value替换 foreach (var key in pairs.Keys) { Regex regex = new Regex(@"\$\{" + key + @"\}"); // 如果Key也是正则表达式?? result = regex.Replace(result, pairs[key].ToString()); result = regex.Replace(result, new MatchEvaluator(m => pairs.ContainsKey(key) ? pairs.UnSafeGet(key).ToString() : m.Groups[1].Value)); // ?? 这里的m. m.Groups[1] 难道指的是一个匹配项,而不是所有匹配项 } } // 将未找到匹配项的占位符删除 else { // 需要优化为,匹配到 \$\{\S*?\} 后按照匹配到的内容作为Key在Map中寻找Value替换 foreach (var key in pairs.Keys) { Regex regex = new Regex(@"\$\{" + key + @"\}"); result = regex.Replace(result, pairs[key].ToString()); // } } return(result); }