找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 24504|回复: 12

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

[复制链接]
发表于 2011-11-22 20:59:43 | 显示全部楼层 |阅读模式
本帖最后由 小爪冰凉君 于 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翻译成汉字比较方便?有没有比较简单的做法?

评分

参与人数 1PB +2 收起 理由
broly + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2011-11-22 21:36:42 | 显示全部楼层

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

评分

参与人数 1技术 +1 收起 理由
小爪冰凉君 + 1 乐于助人

查看全部评分

发表于 2011-11-22 21:43:07 | 显示全部楼层
vbs/js的正则表达式没有反向预查。
你这个可以用子匹配
Pattern = "(class=""third""[\s\S]*?>(.{1,10})(?=</a></span></td>)"

评分

参与人数 1技术 +1 收起 理由
broly + 1 乐于助人

查看全部评分

发表于 2011-11-22 21:44:28 | 显示全部楼层
  1. sed "s/.*_blank"">\(.*\)<\/a>.*/\1/" a.txt >b.txt
复制代码
 楼主| 发表于 2011-11-22 22:10:56 | 显示全部楼层
回复 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
复制代码


改成您说的代码后,运行结果并不能取得预期字符。。。
还有,“+?”这是什么意思呢?
发表于 2011-11-22 22:24:15 | 显示全部楼层
回复  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技术 +1 收起 理由
broly + 1 乐于助人

查看全部评分

 楼主| 发表于 2011-11-22 22:32:55 | 显示全部楼层
回复 3# powerbat


    果然很好用,谢谢帮助!
 楼主| 发表于 2011-11-22 22:33:31 | 显示全部楼层
回复 4# awk


    虽然看不大明白。。。但是谢谢您的帮助
 楼主| 发表于 2011-11-22 22:38:16 | 显示全部楼层
回复 6# Demon


    不知道这Submatches是从哪里得到的?我参考的《VBScript程序员参考手册(第三版)》其中就没有关于Submatches的内容。。。。
发表于 2011-11-22 22:55:52 | 显示全部楼层
碰到不懂的,你可以尝试自己动手去搜索:http://msdn.microsoft.com/zh-cn/site/y27d2s18
发表于 2011-11-22 23:06:18 | 显示全部楼层
回复 9# 小爪冰凉君

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

3楼代码中的第一个括号多余,复制时没删干净。
 楼主| 发表于 2011-11-22 23:08:59 | 显示全部楼层
回复 10# broly


    我患有一种看到英文就全身无力头晕眼花的病。。。
 楼主| 发表于 2011-11-22 23:11:22 | 显示全部楼层
回复 11# powerbat


    谢谢,我把括号删掉之后已经测试成功了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:26 , Processed in 0.036635 second(s), 15 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表