找回密码
 加入
搜索
查看: 4246|回复: 6

[系统综合] 【已解决】求一正则写法 在匹配之中再次匹配。

  [复制链接]
发表于 2014-5-1 20:30:37 | 显示全部楼层 |阅读模式
本帖最后由 zch11230 于 2014-5-2 11:53 编辑

标题有点模糊,打个简单的比方 有这样一段文本
start123a123b123c123end
需要匹配出[0]123 [1]123 [2]123 [3]123
目前我是先用'start(.+)end' 匹配一次 再用 '123' 匹配一次,需要匹配两次才能得到我要的结果 请问有没有用一句正则就搞定的写法?
发表于 2014-5-1 21:06:59 | 显示全部楼层
本帖最后由 fuldho 于 2014-5-1 21:10 编辑

$Str ="start123a123b123c123end"
$sR = StringRegExp($Str, '\d{3}', 3)
For $i = 0 To UBound($sR) - 1
If @error <> 0 Then ExitLoop
        MsgBox(0, "[" & $i &"]", $sR[$i])
Next
 楼主| 发表于 2014-5-1 21:38:21 | 显示全部楼层
回复 2# fuldho

感谢回复  不过我是打的比方简单 并不是问题这么简单而已  start 和end 一定要考虑进去的。
发表于 2014-5-1 22:33:24 | 显示全部楼层

评分

参与人数 1贡献 +1 收起 理由
lixiaolong + 1 a版的理解能力太让我佩服。。。

查看全部评分

发表于 2014-5-1 22:47:05 | 显示全部楼层
本帖最后由 lixiaolong 于 2014-5-1 22:48 编辑

回复 1# zch11230
#include <Array.au3>

$Str = 'start123a123b123c123end'

Local $Test = StringRegExp($Str, '(?<=start|[abc])\d+(?=[abc]|end)', 3)

_ArrayDisplay($Test, UBound($Test))
有没有其他的文本?
发表于 2014-5-1 23:08:43 | 显示全部楼层
StringSplit("start123a123b123c123end","123",1)
 楼主| 发表于 2014-5-2 11:52:29 | 显示全部楼层
AFAN的回答成功解决,只是只学会了方法,未领悟其含义。
因为平时在提取自己需要的内容时经常遇到这种情况,之前的办法就是匹配两次   这里以前几天有人提的问为例,他需要的是提取网易博客的正文,假如再需要提取正文中的图片地址,不过从效率上来看,匹配两次貌似更快点,不知道有没有高效的匹配一次的方法。
#include <Inet.au3>
#include<array.au3>
$source = _INetGetSource("http://zhangshuyue.blog.163.com/blog/static/179045442013220115848363/")
$time1 = TimerInit()
$jpg = StringRegExp($source, '(?s)(?!nbw-blog-start).*?src="(http://.*?\.jpg).*?(?=.*nbw-blog-end)', 3)
_ArrayDisplay($jpg, TimerDiff($time1))
$time2 = TimerInit()
$tmp = StringRegExp($source, '(?s)<div class="nbw-blog-start"></div>.+?<div class="nbw-blog-end"></div>', 3)
$jpg = StringRegExp($tmp[0], 'src="(http://.*?\.jpg)', 3)
_ArrayDisplay($jpg, TimerDiff($time2))
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-22 13:34 , Processed in 0.087768 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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