Board logo

标题: [问题求助] [已解决]关于正则表达式的问题 [打印本页]

作者: 小爪冰凉君    时间: 2011-11-22 20:59     标题: [已解决]关于正则表达式的问题

本帖最后由 小爪冰凉君 于 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翻译成汉字比较方便?有没有比较简单的做法?
作者: Demon    时间: 2011-11-22 21:36

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

作者: powerbat    时间: 2011-11-22 21:43

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

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

作者: 小爪冰凉君    时间: 2011-11-22 22:10

回复 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
复制代码


改成您说的代码后,运行结果并不能取得预期字符。。。
还有,“+?”这是什么意思呢?
作者: Demon    时间: 2011-11-22 22:24

回复  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
复制代码
好好补充一下正则表达式的知识吧。
作者: 小爪冰凉君    时间: 2011-11-22 22:32

回复 3# powerbat


    果然很好用,谢谢帮助!
作者: 小爪冰凉君    时间: 2011-11-22 22:33

回复 4# awk


    虽然看不大明白。。。但是谢谢您的帮助
作者: 小爪冰凉君    时间: 2011-11-22 22:38

回复 6# Demon


    不知道这Submatches是从哪里得到的?我参考的《VBScript程序员参考手册(第三版)》其中就没有关于Submatches的内容。。。。
作者: broly    时间: 2011-11-22 22:55

碰到不懂的,你可以尝试自己动手去搜索:http://msdn.microsoft.com/zh-cn/site/y27d2s18
作者: powerbat    时间: 2011-11-22 23:06

回复 9# 小爪冰凉君

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

3楼代码中的第一个括号多余,复制时没删干净。
作者: 小爪冰凉君    时间: 2011-11-22 23:08

回复 10# broly


    我患有一种看到英文就全身无力头晕眼花的病。。。
作者: 小爪冰凉君    时间: 2011-11-22 23:11

回复 11# powerbat


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




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2