带参数标签的取值方法

方法一:

<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>新建网页 1</title>
</head>
<body>
<%
content="<h1>这里显示的是有参数的标签啊!</h1>第一个标签,两个参数选择显示类型和显示条数<br />$shownews(2,15)$第二个标签,一个参数来判断拆分的有效性,$show2(5)$<br />第三个标签,无参数$nolable()$"
'这是我习惯用的变量名,从模板读取的内容变量.
call replacelable(content,"$shownews")
call replacelable(content,"$show2")
call replacelable(content,"$nolable")
'这里调用处理标签的程序,可以适用不同的标签,注意写法!
response.write content
'显示处理过的内容

sub replacelable(c,l)
'这个sub说过用途了!
tmp2=1
while instr(tmp2,c,l)>0
'一开始没想明白这个循环的作用,后来想想要看是否有多个标签,比较深刻
tmp1=instr(tmp2,c,l)'标签第一位
tmp2=instr(tmp1+1,c,"$")'标签结束.
tmpstr=mid(c,tmp1,tmp2-tmp1)'标签除}部分.
tmpstr=replace(tmpstr,l,"")'去除$shownews,即剩下参数(2,15)
tmpstr=replace(tmpstr,"(","")
tmpstr=replace(tmpstr,")","")'只剩下2,15
canshu=split(tmpstr,",")
'这里将参数拆分,不管多少个,要在下面的select中分别处理,看来还要试一下无参数和一个参数的才能稳定
'测试结果,对于没有参数的标签要加()才行,使用时注意就可以了
select case l
        case "$shownews"
        c=replace(c,l&"("&tmpstr&")$",author(canshu(0),canshu(1)))
        case "$show2"
        c=replace(c,l&"("&tmpstr&")$",show2(canshu(0)))
        case "$nolable"
        c=replace(c,l&"("&tmpstr&")$",nolable())
end select
wend
end sub
function author(cc,ll)
author="格式为:"&cc
author=author&"<ul>"
for x=1 to ll
author=author&"<li>"
author=author&"dssdfsdfsdfss"
author=author&"</li>"
next
author=author&"</ul>"
end function
function show2(ccc)
show2="接收到参数:"&ccc
end function
function nolable()
nolable="这个没有参数,显示正常"
end function
%>

<br>
</body>

 

方法二:

<%
'标签组成类型
dim aa
aa="{$blog:name;aa=3,bb=2,cc=3,dd=4,eee=true}"
Response.write TagsArr(aa,4)

'================================
'分解完数组产生输入函数的字符串 2
'例如:Key1=2,Key1=3
'================================
Function TagsValue(Byval Value)
   Dim str_TagsName,str_TagsValue
       '标签名称:目前无用,可以在需要的时候调用
       'str_TagsName = Split(Replace(Replace(Value,"{$blog:",""),"}",""),";")(0)
       str_TagsValue = Split(Replace(Replace(Value,"{$blog:",""),"}",""),";")(1)
       TagsValue = str_TagsValue
End Function

'================================
'裸值输入定义数组。1
'说明:分解完标签获得输入值以后,取值长度不能超过TagsLen的最大数字
'可以直接使用,直接输入完整标签无需分解
'0为第一参数值,1为第二参数值,以此类推
'================================
Function TagsArr(TagsStr,Value)
    TagsArr = Split(Split(TagsValue(TagsStr),",")(Value),"=")(1)
End Function

'================================
'函数说明:确定输入参数长度,返回布尔值
'参数:直接输入完整标签
'================================
Function TagsLen(StrValue,Value)
    If Ubound(Split(TagsValue(StrValue),",")) <> Value Then
   TagsLen = False
    Else
   TagsLen = True
    End If
End Function
%>
</html>

方法三 正则表达式

<%
'//函数:带参数的标签获取者
'//参数:DiyLable:标签,Template:包含标签的内容,Content:变量内容
Function ReplaceTestDiy(DiyLable,Template,Content)
ReplaceTestDiy=Template
Dim regEx,Match,myMatches
Set regEx=New RegExp
   regEx.Pattern = DiyLable
   regEx.IgnoreCase = True
   regEx.Global = True
Set myMatches=regEx.Execute(Template)
If myMatches.Count<=0 Then Exit function
For Each Match In myMatches
   DiyLable=Replace(ReplaceTestDiy,"{$Title2:" & Match.SubMatches.item(0) & "$}",Left(Content,Match.SubMatches.item(0)))
Next
   ReplaceTestDiy=DiyLable
End Function


Template="asfsadf{$Title2:5$}asfdsdf"
Asp_Lable="{\$Title2:(\d+)\$}"   '标题
Template = ReplaceTestDiy(Asp_Lable,Template,"汇聚心理学界力量 重建心灵家园")
Response.write Template
%>

posted @ 2008-09-26 16:09  天涯海客  阅读(273)  评论(0编辑  收藏  举报