快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

正则表达式结合数组提取文章中的文件名

今天编Blog上传模块的时候,需要用到一个提取文章中文件名的子程,开始我把问题想复杂了,匹配了所有可能的文件名,不仅正则表达式写了一大串,而且下面还Split了半天,后来我忽然发现Blog的上传文件都存在upload下,白写了那么多复杂的匹配。。。哎,不能浪费掉啊,还是贴上来万一哪个兄弟以后需要也好拿去用~~

下面这段子程基本上可以算是比较不错的通用匹配了。(PS:我忽然发现CODE_LITE把我的UBB转义了!!!晕,我只好自己转义了。。。)


--------------------------------------------------------------------------------
Dim objRegExp,Matches,i,DC9_DOT_CN_MATCH
Dim aryMatch()
Redim Preserve aryMatch(0)
Set objRegExp=New RegExp
objRegExp.IgnoreCase =True
objRegExp.Global=True
objRegExp.Pattern="(?:[[^]]+]([^[]+)[/[^]]+])|(?:(?:href|src)=([^s|^>]+)[""|>|s\\\'])"
Set Matches = objRegExp.Execute("[img]2312.jpg[/img][img]2312.jpg[/img]hh[img]http://www.etoow.com/cm/upload/2ed312.jpg[/img]<a href=""http://www.etoow.com/ddd.jpg""></a> href=""http://www.etoow.com/dccdd.jpg"">[IMG_RIGHT=400,300,title]upload/2assas.jpg[/IMG_RIGHT]<sctipt src=""http://www.etoow.com/upload/sss.jpg""")
Dim TmpMatch
For i=0 to Matches.Count-1
Call InsertDataToArray(Matches(i).SubMatches(0),aryMatch)
Call InsertDataToArray(Matches(i).SubMatches(1),aryMatch)
Next

For i=0 to Ubound(aryMatch)
If Not IsNull(aryMatch(i)) And Trim(aryMatch(i))<>"" Then Response.write aryMatch(i)&"<br>"
Next

Function InsertDataToArray(Data,ByRef aryMatch)
If Trim(Data)<>"" Then
Data=Replace(Data,"\\\'","")
Data=Replace(Data,"""","")
Data=Replace(Data,"","/")
Data=Split(Data,"/")(Ubound(Split(Data,"/")))
Redim Preserve aryMatch(Ubound(aryMatch)+1)
DC9_DOT_CN_MATCH=False
For j=0 to Ubound(aryMatch)
If aryMatch(j)=Data Then DC9_DOT_CN_MATCH=True
Next
If Not DC9_DOT_CN_MATCH Then aryMatch(Ubound(aryMatch))=Data
End If
End Function

--------------------------------------------------------------------------------

实际上,Z-Blog的话就匹配Upload就可以了(但是我为了省事,也为了更精确些,就干脆在上面的那个匹配上面加上了upload,所以看上去似乎下面这个更复杂些,其实理论上应该下面这个简朴些,究竟有upload管着呢。。),也不用SPLit那个/.这么写就可以了:


--------------------------------------------------------------------------------
Dim objRegExp,Matches,i,ZC_UPLOAD_MATCH
Dim aryMatch()
Redim Preserve aryMatch(0)
Set objRegExp=New RegExp
objRegExp.IgnoreCase =True
objRegExp.Global=True
objRegExp.Pattern="(?:[[^]]+][^[]*upload/([^[|^\\|^/]+)[/[^]]+])|(?:(?:href|src)=""{0,1}[^s|^""|^>|^\\\']*upload/([^s|^>]+)[""|>|s\\\'])"
Set Matches = objRegExp.Execute("[img]2312.jpg[/img][img]2312.jpg[/img]hh[img]http://www.etoow.com/cm/upload/2ed312.jpg[/img]<a href=""http://www.etoow.com/ddd.jpg""></a> href=""http://www.etoow.com/dccdd.jpg"">[IMG_RIGHT=400,300,title]upload/2assas.jpg[/IMG_RIGHT]<sctipt src=""http://www.etoow.com/upload/sss.jpg"" src=http://www.etoow.com/upload/sasds.jpg\\\'>")
Dim TmpMatch
For i=0 to Matches.Count-1
Call InsertDataToArray(Matches(i).SubMatches(0),aryMatch)
Call InsertDataToArray(Matches(i).SubMatches(1),aryMatch)
Next

For i=0 to Ubound(aryMatch)
If Not IsNull(aryMatch(i)) And Trim(aryMatch(i))<>"" Then Response.write aryMatch(i)&"<br>"
Next

Function InsertDataToArray(Data,ByRef aryMatch)
If Trim(Data)<>"" Then
Data=Replace(Data,"\\\'","")
Data=Replace(Data,"""","")
Redim Preserve aryMatch(Ubound(aryMatch)+1)
ZC_UPLOAD_MATCH=False
For j=0 to Ubound(aryMatch)
If aryMatch(j)=Data Then ZC_UPLOAD_MATCH=True
Next
If Not ZC_UPLOAD_MATCH Then aryMatch(Ubound(aryMatch))=Data
End If
End Function
返回类别: 教程
上一教程: 在ASP中使用SQL语句之1:SELECT 语句
下一教程: ASP实现在WEB中显示电子表格数据(一)显示数据表格的应用

您可以阅读与"正则表达式结合数组提取文章中的文件名"相关的教程:
· 正则表达式在网络编程中的运用(5)
· 正则表达式在网页处理中的应用四则
· 正则表达式在网络编程中的运用(4)
· 正则表达式中的特别字符一览
· ASP正则表达式在UBB论坛中的应用
    微笑服务 优质保证 索取样品