asp.net正则模板引擎代码
我们申明一个数组
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正则模板引擎代码的更多相关文章
- 关于html、asp、php模板引擎、aspnet mvc、REST的一点思考
先看我对REST的一点认识,下面是<rest实战> 这本书的序言文字: 在我刚刚开始从事解决计算问题的时候,业界就有很多人有一个愿望:将系统设计为能够被自由组合的组件.互联网(I ...
- 基于 Koa平台Node.js开发的KoaHub.js的模板引擎代码
koahub-handlebars koahub-handlebars koahub handlebars templates Installation $ npm install koahub-ha ...
- CMS模板引擎:XHtmlAction
前言: 先说说大伙关心的工作上的事,在上家公司任了一个多月的技术经理后,和公司中止了合作关系. 主要原因在于一开始的待遇没谈的太清楚: 1:没有合同,没有公积金,连社保也没交. 2:工资的30%变成了 ...
- Nvelocity模板引擎开发网页
在ASP.NET网站开发中,我们要做许多的网页,如果多个网页的内容框架有些重复使用,我们用NVelocity模板引擎,就可以把相同的部分html代码单独放在一个文件中就行了,当要使用的时候,只需使用# ...
- node.js中的模板引擎jade、handlebars、ejs
使用node.js的Express脚手架生成项目默认是jade模板引擎,jade引擎实在是太难用了,这么难用还敢设为默认的模板引擎,过分了啊!用handlebars模板引擎写还说的过去,但笔者更愿意使 ...
- PHP实现简易的模板引擎
PHP实现简易的模板引擎 1.MVC简介 MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式(详情自己百度): 1. Mode ...
- MVC的验证(模型注解和非侵入式脚本的结合使用) .Net中初探Redis .net通过代码发送邮件 Log4net (Log for .net) 使用GDI技术创建ASP.NET验证码 Razor模板引擎 (RazorEngine) .Net程序员应该掌握的正则表达式
MVC的验证(模型注解和非侵入式脚本的结合使用) @HtmlHrlper方式创建的标签,会自动生成一些属性,其中一些属性就是关于验证 如图示例: 模型注解 通过模型注解后,MVC的验证,包括前台客 ...
- JavaScript模板引擎原理,几行代码的事儿
一.前言 什么是模板引擎,说的简单点,就是一个字符串中有几个变量待定.比如: var tpl = 'Hei, my name is <%name%>, and I\'m <%age% ...
- Asp.net MVC Razor模板引擎技巧分享
Razor是Asp.net MVC中新的默认模板类型, 语法简单易用.这篇文章不涉及Razor的语法,主要介绍Razor的一些在MVC项目中的使用技巧,以及脱离MVC环境下,如何使用Razor. 阅读 ...
随机推荐
- 前端学PHP之基础语法
× 目录 [1]代码标识 [2]注释 [3]输出 [4]计算表达式 [5]大小写 [6]空白符 前面的话 PHP是一种创建动态交互性站点的强有力的服务器端脚本语言.PHP能够包含文本.HTML.CSS ...
- CSDN 论坛招聘区是不是有潜规则?在Cnblog招个人试试...
CSDN 论坛招聘区是不是有潜规则? 在招聘区发了两个招聘贴都被删掉了... 而且没有任何提示和原因,或者站内短信提示.... 虽然csdn现在很水...不过在那边之前待了几年还是有点感情的 想顺便内 ...
- 基于Metronic的Bootstrap开发框架经验总结(1)-框架总览及菜单模块的处理
最近一直很多事情,博客停下来好久没写了,整理下思路,把最近研究的基于Metronic的Bootstrap开发框架进行经验的总结出来和大家分享下,同时也记录自己对Bootstrap开发的学习研究的点点滴 ...
- Azure Redis Cache (3) 在Windows 环境下使用Redis Benchmark
<Windows Azure Platform 系列文章目录> 熟悉Redis环境的读者都知道,我们可以在Linux环境里,使用Redis Benchmark,测试Redis的性能. ht ...
- CentOS7 SonarQube安装
CentOS7 SonarQube安装 CentOS7 SonarQube安装 Download 从sonarqube下载sonarqube-5.0.zip 从sonarqube下载sonar-run ...
- java变量的加载顺序
学习编程思想 package com.test.java.classs; /** * Created by Administrator on 2015/12/7. * 在类的内部,变量定义的顺序决定了 ...
- Ionic2学习笔记(2):自定义Component
作者:Grey 原文地址: http://www.cnblogs.com/greyzeng/p/5536298.html 上一篇提到,Ionic2提供了很多Co ...
- a[href^=""]的解释
a[href^="绝对路径"]这个算一种属性选择器,在这里是用来选择链接属性为“绝对路径”的a标签,其中的^其实是"以什么为开始"(begin with)的意思 ...
- C#微信公众平台开发—高级群发接口
涉及access_token的获取请参考<C#微信公众平台开发—access_token的获取存储与更新> 一.为了实现高级群发功能,需要解决的问题 1.通过微信接口上传图文消息素材时,J ...
- Type 'Insus.NET.PictureObject' in Assembly 'App_Code, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable.
昨晚想实现一个功能,需要把一个对象存储于ViewState中去,但在运行时,出现下面的异常. Type 'Insus.NET.PictureObject' in Assembly 'App_Code, ...