[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] [已解决]VBS正则提取(删除)指定字符串

近日在vbs中遇到一个问题,先看代码:
  1. Dim str
  2. str = "<br>对于他来说,保护&#456贺一鸣的任务&123序列,远在烤鱼之上,既然贺一&#11111990;鸣脱离了他的视&#o39;伐范围,那么他就必须最上去。</br>"
  3. MsgBox RegTest(str, "<br>([^&#.*;]+)</br>")
  4. Function RegTest(vbstr, pattern)
  5.   dim regEx, Matches, Match, regstr
  6.   set regEx = New RegExp
  7.   regEx.Pattern = pattern
  8.   regEx.Global = true
  9.   regEx.IgnoreCase = false
  10.   set Matches = regEx.execute(vbstr)
  11.   for each Match in Matches
  12.     regstr = regstr & Match.value
  13.   Next
  14.   RegTest = regstr
  15. End Function
复制代码
我的原意是去掉str两头的标签以及以$#打头并以;结束的字符串(在例子中为&#11111990;和&#o39;),但搞了n久都没有成功,特来请教大家,还望知道的不吝赐教于我,先在此表示感谢了!

又仔细看了正则的资料并转换了思路,成功解决,代码如下:
  1. Dim str
  2. str = "<br>对于他来说,保护&#456贺一鸣的任务&123序列,远在烤鱼之上,既然贺一&#11111990;鸣脱离了他的视&#o39;伐范围,那么他就必须最上去。</br>"
  3. MsgBox RegTest(str, "([<br>/]|&#.[0-9]+;)")
  4. Function RegTest(vbstr, pattern)
  5.   dim regEx, Matches, Match
  6.   set regEx = New RegExp
  7.   regEx.Pattern = pattern
  8.   regEx.Global = true
  9.   regEx.IgnoreCase = false
  10.   set Matches = regEx.Execute(vbstr)
  11.   for each Match in Matches
  12.     vbstr = Replace(vbstr, Match, "")
  13.   Next
  14.   RegTest = vbstr
  15. End Function
复制代码
***共同提高***

是提取中文字符吗?
  1. (?:[^>]*(?=[$])|[^0-9#&a-zA-Z<>;/]*)
复制代码

TOP

2# asnahu
不是的,提取后为:
对于他来说,保护&#456贺一鸣的任务&123序列,远在烤鱼之上,既然贺一鸣脱离了他的视伐范围,那么他就必须最上去。
***共同提高***

TOP

这样呢?
  1. (?:[^>;]*(?=&)|(?!=[0-9];)[^;</>a-z0-9#]*)
复制代码

TOP

为什么不直接用正则自己的Replace:
regEx.Pattern = "<\/?[^<>]+>|&#[^&#;]+;"
regEx.Replace(vbstr, "")

TOP

5# powerbat
有区别吗?
***共同提高***

TOP

对正则来说,你调用的那个Replace()函数是“第三方”,更何况用它自己的更方便(至少代码简省一些)。

TOP

返回列表