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

[问题求助] [已解决]关于正则表达式的问题

本帖最后由 小爪冰凉君 于 2011-11-22 23:15 编辑

我有如下一段数据流:
“<td class=""third""><span><a href=""http://mp3.baidu.com/singerlist/%D6%DC%BD%DC%C2%D7.html"" target=""_blank"">周杰伦</a></span></td>”
其中“third”是标志位(必须检查此字符),想通过正则表达式提取其中的红字部分(包含不定字节数,其中可能有空格等符号)
我的方法是Pattern = (?=class=""third"">\S*\s\S\s.{18})\.{1,10}(?=</a></span></td>)
但是显示不对。。。。

希望达人给予帮助!

另:难道把%D6%DC%BD%DC%C2%D7翻译成汉字比较方便?有没有比较简单的做法?
1

评分人数

    • broly: 感谢给帖子标题标注[已解决]字样PB + 2

  1. Pattern = "<td class=""third""><span><a .+?>(.+?)</a>"
复制代码
1

评分人数

TOP

vbs/js的正则表达式没有反向预查。
你这个可以用子匹配
Pattern = "(class=""third""[\s\S]*?>(.{1,10})(?=</a></span></td>)"
1

评分人数

    • broly: 乐于助人技术 + 1

TOP

  1. sed "s/.*_blank\"\">\(.*\)<\/a>.*/\1/" a.txt >b.txt
复制代码

TOP

回复 2# Demon

我的测试程序是这样的:
   
  1. a = "<td class=""third""><span><a href=""http://mp3.baidu.com/singerlist/%D6%DC%BD%DC%C2%D7.html"" target=""_blank"">周杰伦</a></span></td>"
  2. Set choose = New RegExp
  3. choose.Global = true
  4. 'choose.Pattern = "(?=<td class=""third""\S*target=""_blank"">).*(?=</a></span></td>)"
  5. 'choose.Pattern = "[\u4E00-\u9FFF]*"
  6. 'choose.Pattern ="(?=class=""third"">\S*\s\S\s.{18})\S{1,10}(?=</a></span></td>)"
  7. choose.Pattern = "<td class=""third""><span><a .+?>(.+?)</a>"
  8. For Each colm In choose.Execute(a)
  9. MsgBox colm.Value
  10. next
复制代码


改成您说的代码后,运行结果并不能取得预期字符。。。
还有,“+?”这是什么意思呢?

TOP

回复  Demon

我的测试程序是这样的:
   

改成您说的代码后,运行结果并不能取得预期字符。。。
...
小爪冰凉君 发表于 2011-11-22 22:10
  1. a = "<td class=""third""><span><a href=""http://mp3.baidu.com/singerlist/%D6%DC%BD%DC%C2%D7.html"" target=""_blank"">周杰伦</a></span></td>"
  2. Set choose = New RegExp
  3. choose.Global = true
  4. 'choose.Pattern = "(?=<td class=""third""\S*target=""_blank"">).*(?=</a></span></td>)"
  5. 'choose.Pattern = "[\u4E00-\u9FFF]*"
  6. 'choose.Pattern ="(?=class=""third"">\S*\s\S\s.{18})\S{1,10}(?=</a></span></td>)"
  7. choose.Pattern = "<td class=""third""><span><a .+?>(.+?)</a>"
  8. For Each colm In choose.Execute(a)
  9.         MsgBox colm.Submatches(0)
  10. next
复制代码
好好补充一下正则表达式的知识吧。
1

评分人数

    • broly: 乐于助人技术 + 1

TOP

回复 3# powerbat


    果然很好用,谢谢帮助!

TOP

回复 4# awk


    虽然看不大明白。。。但是谢谢您的帮助

TOP

回复 6# Demon


    不知道这Submatches是从哪里得到的?我参考的《VBScript程序员参考手册(第三版)》其中就没有关于Submatches的内容。。。。

TOP

碰到不懂的,你可以尝试自己动手去搜索:http://msdn.microsoft.com/zh-cn/site/y27d2s18
---学无止境---

TOP

回复 9# 小爪冰凉君

《Windows脚本技术》(script56.chm)
http://www.bathome.net/thread-1985-1-1.html

3楼代码中的第一个括号多余,复制时没删干净。

TOP

回复 10# broly


    我患有一种看到英文就全身无力头晕眼花的病。。。

TOP

回复 11# powerbat


    谢谢,我把括号删掉之后已经测试成功了。

TOP

返回列表