生成HTML静态化一个很有用的正则表达式的替换功能

来源:互联网 发布:物理名师课堂软件 编辑:程序博客网 时间:2024/06/06 05:45

生成HTML静态化无非就是模板标签替换,但有细节上有一个功能确需要高级一点的标签替换,也就是能接收设置的参数的标签替换。

日常的替换比如 {$siteTitle$}  也许在程序中就直接 替换成了 siteTitle 这个函数,然后获取它return的内容即可

但是如果比如取5条最新新闻 {$getNews(5)$}     有对应的函数 getNews(5)

但是如果有修改成10条,你就要加一个替换规则  {$getNews(10)$}   getNews(10)

当然在书写规则时这种情况并不多,而且中在最初开发时就确定了的,只是维护时显得不方便,每次修改条数就要修改替换规则。

有必要实现参数的识别,经过研究了一阵,实现了这个功能,代码保存如下

 

public string getContent(string len) {
        string rv = "ooxx"+len+"次<br />";
        return rv;
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        string tag = "{getContent(3)}{getContent(5)}{getContent(8)}";
        //要求上实现不管tag括号内是什么数字,都能获取这个值并调用函数返回对应数量的数据
        string pattern = "{getContent\\((\\d)\\)}";
        string replacement = getContent("$1");
        string result = Regex.Replace(tag, pattern, replacement);
        Response.Write(result); 

    }

关于这其中,getContent("$1");
在replace 方法中使用 $1 来引用所保存的第一个子匹配。如果有多个子匹配,则可以用 $2, $3 等继续引用。
转载网上的说明如下
http://msdn.microsoft.com:80/scripting/default.htm
下面的正则表达式可以提供这个功能。对 JScript,为:
/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/
对 VBScript 为:
"(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)"
第一个附加子表达式是用来捕获该 web 地址的协议部分。该子表达式匹配位于一个冒号和两个正斜杠之前的任何单词。第二个附加子表达式捕获该地址的域名地址。该子表达式匹配不包括 '^'、 '/' 或 ':' 字符的任何字符序列。第三个附加子表达式捕获网站端口号码,如果指定了该端口号。该子表达式匹配后跟一个冒号的零或多个数字。最后,第四个附加子表达式捕获由该 web 地址指定的路径以及\或者页面信息。该子表达式匹配一个和多个除'#' 或空格之外的字符。
将该正则表达式应用于上面所示的 URI 后,子匹配包含下述内容: 
RegExp.$1 包含 "http" 
RegExp.$2 包含 "msdn.microsoft.com"
RegExp.$3 包含 ":80"
RegExp.$4 包含 "/scripting/default.htm"

 

原创粉丝点击