我们申明一个数组

   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模板引擎,它用起来也很不错。

asp.net正则模板引擎代码的更多相关文章

  1. 关于html、asp、php模板引擎、aspnet mvc、REST的一点思考

    先看我对REST的一点认识,下面是<rest实战> 这本书的序言文字:      在我刚刚开始从事解决计算问题的时候,业界就有很多人有一个愿望:将系统设计为能够被自由组合的组件.互联网(I ...

  2. 基于 Koa平台Node.js开发的KoaHub.js的模板引擎代码

    koahub-handlebars koahub-handlebars koahub handlebars templates Installation $ npm install koahub-ha ...

  3. CMS模板引擎:XHtmlAction

    前言: 先说说大伙关心的工作上的事,在上家公司任了一个多月的技术经理后,和公司中止了合作关系. 主要原因在于一开始的待遇没谈的太清楚: 1:没有合同,没有公积金,连社保也没交. 2:工资的30%变成了 ...

  4. Nvelocity模板引擎开发网页

    在ASP.NET网站开发中,我们要做许多的网页,如果多个网页的内容框架有些重复使用,我们用NVelocity模板引擎,就可以把相同的部分html代码单独放在一个文件中就行了,当要使用的时候,只需使用# ...

  5. node.js中的模板引擎jade、handlebars、ejs

    使用node.js的Express脚手架生成项目默认是jade模板引擎,jade引擎实在是太难用了,这么难用还敢设为默认的模板引擎,过分了啊!用handlebars模板引擎写还说的过去,但笔者更愿意使 ...

  6. PHP实现简易的模板引擎

    PHP实现简易的模板引擎 1.MVC简介 MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式(详情自己百度): 1. Mode ...

  7. MVC的验证(模型注解和非侵入式脚本的结合使用) .Net中初探Redis .net通过代码发送邮件 Log4net (Log for .net) 使用GDI技术创建ASP.NET验证码 Razor模板引擎 (RazorEngine) .Net程序员应该掌握的正则表达式

    MVC的验证(模型注解和非侵入式脚本的结合使用)   @HtmlHrlper方式创建的标签,会自动生成一些属性,其中一些属性就是关于验证 如图示例: 模型注解 通过模型注解后,MVC的验证,包括前台客 ...

  8. JavaScript模板引擎原理,几行代码的事儿

    一.前言 什么是模板引擎,说的简单点,就是一个字符串中有几个变量待定.比如: var tpl = 'Hei, my name is <%name%>, and I\'m <%age% ...

  9. Asp.net MVC Razor模板引擎技巧分享

    Razor是Asp.net MVC中新的默认模板类型, 语法简单易用.这篇文章不涉及Razor的语法,主要介绍Razor的一些在MVC项目中的使用技巧,以及脱离MVC环境下,如何使用Razor. 阅读 ...

随机推荐

  1. NASA的下一个十年(译)

    原文 MICHAEL ROSTON (New York Times) 从左起:木卫二:土卫六:经过火星的水手谷星的合成图:金星的拼接图 大多数人已经从人类第一次近距离看到冥王星的兴奋中冷静下来.下一个 ...

  2. TextView显示html文件中的图片

    fromHtml还有另一个重构:fromHtml(String source, Html.ImageGetter imageGetter, Html.TagHandler tagHandler) 而I ...

  3. Linux ACL

    ACL 是什么 ACL的全称是 Access Control List (访问控制列表) ,一个针对文件/目录的访问控制列表.它在UGO权限管理的基础上为文件系统提供一个额外的.更灵活的权限管理机制. ...

  4. 【转】jQuery中.bind() .live() .delegate() .on()的区别

    bind(type,[data],fn) 为每个匹配元素的特定事件绑定事件处理函数 $("a").bind("click",function(){alert(& ...

  5. [Asp.net 5] Localization-简单易用的本地化-全球化信息

    本篇比较简单介绍Localization解决方案中: Microsoft.Framework.Globalization.CultureInfoCache 工程 CultureInfoGenerato ...

  6. ASP.NET MVC怎样引用你的model

    在视图中,引用model,并绑定.有2种情况,一是数据集,另一个是单个model. 实现之前,有准备一个数据吧. 创建一个model: source code: namespace Insus.NET ...

  7. SQL去除回车符,换行符,空格和水平制表符

    MS SQL去除回车符,换行符,空格和水平制表符,参考下面语句,一般情况是SQL接受富文本或是textarea的内容.在数据库接收到这些数据之后,还是对其做一些处理. ),),),''),' ','' ...

  8. bootstrap学习笔记系列4------bootstrap按钮

    按钮标签 在<a>,<button>或input元素上使用按钮class.但是为了避免跨浏览器的不一致性,建议使用<button>标签. <!DOCTYPE ...

  9. 如何显示二进制流的图片(利用img控件)

    之前在http://www.cnblogs.com/JsonZhangAA/p/5568575.html博文中是利用的image控件来显示的二进制流图片,我现在想的是能 通过普通的<img id ...

  10. C#使用Process调用批处理阻塞问题

    PS:又见到熟悉的C#代码了,好开心,哈哈哈.这次又跳坑了,好不容易才爬起来.   公司有自己开发的一套Submit.Compile.Publish的生命周期系统. 在Compile时,需要调用外部的 ...