我们申明一个数组

   public static Regex[] r = new Regex[];

接下来关键的正则表达式:

            RegexOptions options = RegexOptions.None;
//嵌套模板标签(兼容)
r[] = new Regex(@"<!--{template ((skin=\\""([^\[\]\{\}\s]+)\\""(?:\s+))?)src=(?:\/|\\"")([^\[\]\{\}\s]+)(?:\/|\\"")(?:\s*)}-->", options);
//模板路径标签(新增)
r[] = new Regex(@"<!--{templateskin((=(?:\\"")([^\[\]\{\}\s]+)(?:\\""))?)(?:\s*)}-->", options);
//命名空间标签
r[] = new Regex(@"<!--{namespace (?:""?)([\s\S]+?)(?:""?)}-->", options);
//C#代码标签
r[] = new Regex(@"<!--{csharp}-->([\s\S]+?)<!--{/csharp}-->", options);
//loop循环(抛弃)
r[] = new Regex(@"<!--{loop ((\(([^\[\]\{\}\s]+)\) )?)([^\[\]\{\}\s]+) ([^\[\]\{\}\s]+)}-->", options);
//foreach循环(新增)
r[] = new Regex(@"<!--{foreach(?:\s*)\(([^\[\]\{\}\s]+) ([^\[\]\{\}\s]+) in ([^\[\]\{\}\s]+)\)(?:\s*)}-->", options);
//for循环(新增)
r[] = new Regex(@"<!--{for\(([^\(\)\[\]\{\}]+)\)(?:\s*)}-->", options);
//if语句标签(抛弃)
r[] = new Regex(@"<!--{if (?:\s*)(([^\s]+)((?:\s*)(\|\||\&\&)(?:\s*)([^\s]+))?)(?:\s*)}-->", options);
r[] = new Regex(@"<!--{else(( (?:\s*)if (?:\s*)(([^\s]+)((?:\s*)(\|\||\&\&)(?:\s*)([^\s]+))*))?)(?:\s*)}-->", options);
//if语句标签(新增)
r[] = new Regex(@"<!--{if\((([^\s]+)((?:\s*)(\|\||\&\&)(?:\s*)([^\s]+))?)\)(?:\s*)}-->", options);
r[] = new Regex(@"<!--{else(( (?:\s*)if\((([^\s]+)((?:\s*)(\|\||\&\&)(?:\s*)([^\s]+))?))?\))(?:\s*)}-->", options);
//循环与判断结束标签(兼容)
r[] = new Regex(@"<!--{\/(?:loop|foreach|for|if)(?:\s*)}-->", options);
//continue标签
r[] = new Regex(@"<!--{continue(?:\s*)}-->");
//break标签
r[] = new Regex(@"<!--{break(?:\s*)}-->");
//request标签
r[] = new Regex(@"(\{request\[([^\[\]\{\}\s]+)\]\})", options);
//截取字符串标签
r[] = new Regex(@"(<!--{cutstring\(([^\s]+?),(.\d*?)\)}-->)", options);
//url链接标签
r[] = new Regex(@"(<!--{linkurl\(([^\s]*?)\)}-->)", options);
//声明赋值标签(兼容)
r[] = new Regex(@"<!--{set ((\(?([\w\.<>]+)(?:\)| ))?)(?:\s*)\{?([^\s\{\}]+)\}?(?:\s*)=(?:\s*)(.*?)(?:\s*)}-->", options);
//数据变量标签
r[] = new Regex(@"(\{([^\[\]\{\}\s]+)\[([^\[\]\{\}\s]+)\]\})", options);
//普通变量标签
r[] = new Regex(@"({([^\[\]/\{\}=:'\s]+)})", options);
//时间格式转换标签
r[] = new Regex(@"(<!--{datetostr\(([^\s]+?),(.*?)\)}-->)", options);
//整型转换标签
r[] = new Regex(@"(\{strtoint\(([^\s]+?)\)\})", options);
//直接输出标签
r[] = new Regex(@"<!--{(?:write |=)(?:\s*)(.*?)(?:\s*)}-->", options);

看着一堆啊!主要不怎么会正则就感觉很难。

现在我们在下面方法中怎么使用 主要讲一下替换判断语句if标签

           string strTemplate=""//这里放你想替换的模板内容
foreach (Match m in r[].Matches(strTemplate))
{
IsCodeLine = true;
strTemplate = strTemplate.Replace(m.Groups[].ToString(),
"\r\n\tif (" + m.Groups[].ToString().Replace("\\\"", "\"") + ")\r\n\t{");
}
foreach (Match m in r[].Matches(strTemplate))
{
IsCodeLine = true;
if (m.Groups[].ToString() == string.Empty)
{
strTemplate = strTemplate.Replace(m.Groups[].ToString(),
"\r\n\t}\r\n\telse\r\n\t{");
}
else
{
strTemplate = strTemplate.Replace(m.Groups[].ToString(),
"\r\n\t}\r\n\telse if (" + m.Groups[].ToString().Replace("\\\"", "\"") + ")\r\n\t{");
}
}
foreach (Match m in r[].Matches(strTemplate))
{
IsCodeLine = true;
strTemplate = strTemplate.Replace(m.Groups[].ToString(),
"\r\n\tif (" + m.Groups[].ToString().Replace("\\\"", "\"") + ")\r\n\t{");
}
foreach (Match m in r[].Matches(strTemplate))
{
IsCodeLine = true;
if (m.Groups[].ToString() == string.Empty)
{
strTemplate = strTemplate.Replace(m.Groups[].ToString(),
"\r\n\t}\r\n\telse\r\n\t{");
}
else
{
strTemplate = strTemplate.Replace(m.Groups[].ToString(),
"\r\n\t}\r\n\telse if (" + m.Groups[].ToString().Replace("\\\"", "\"") + ")\r\n\t{");
}
}

自己写一个模板引擎就是麻烦,或许直接动态页面和伪静态更简单些。以前都是用的velocity模板引擎,它用起来也很不错。

最新文章

  1. c# winform vlcPlayer播放器
  2. 基础篇-Windows保护模式
  3. win8.1禁用和去除SkyDrive任务栏图标方法
  4. Linux防火墙规则的查看、添加、删除和修改
  5. 【PHPsocket编程专题(实战篇③)】构建基于socket的HTTP请求类
  6. BZOJ 2152: 聪聪可可 点分治
  7. 去除右键菜单opendlg
  8. JavaScript split()
  9. java对获取的字节数组进行处理
  10. 项目记事【SpringMVC-1】:后台接收前端传来的JSON,并转成对象
  11. ●洛谷P1291 [SHOI2002]百事世界杯之旅
  12. vue学习笔记(二)- 数据绑定、列表渲染、条件判断
  13. Python下划线的详解
  14. string所在头文件
  15. C++ code:浮点数的比较(Floating-Pointing Number Comparison)
  16. ES6之箭头表达式
  17. Lintcode521-Remove Duplicate Numbers in Array-Easy
  18. 在c语言中嵌入汇编语句,对于我来说相当难。
  19. 安装win7到移动硬盘
  20. vmware fusion 10序列号

热门文章

  1. Linux 启动过程分析
  2. JavaScript中以一个方法作为参数的写法
  3. SURF算子(1)
  4. elasticsearch 查询(match和term)
  5. ADO.NET基础03
  6. js 比较好的博客
  7. Ubuntu Server 16.04下ASP.NET Core Web Api + MySql + Dapper在 Jexus、nginx 下的简单测试
  8. 你应该知道的 RPC 原理
  9. Github的第三方验证
  10. 提高生产性工具 - Model代码生成器(NET / JAVA) (一)