zch11230 发表于 2014-5-1 20:30:37

【已解决】求一正则写法 在匹配之中再次匹配。

本帖最后由 zch11230 于 2014-5-2 11:53 编辑

标题有点模糊,打个简单的比方 有这样一段文本start123a123b123c123end需要匹配出123 123 123 123
目前我是先用'start(.+)end' 匹配一次 再用 '123' 匹配一次,需要匹配两次才能得到我要的结果 请问有没有用一句正则就搞定的写法?

fuldho 发表于 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

zch11230 发表于 2014-5-1 21:38:21

回复 2# fuldho

感谢回复不过我是打的比方简单 并不是问题这么简单而已start 和end 一定要考虑进去的。

afan 发表于 2014-5-1 22:33:24

类似 http://www.autoitx.com/forum.php?mod=redirect&goto=findpost&ptid=43973&pid=574327&fromuid=7644923

lixiaolong 发表于 2014-5-1 22:47:05

本帖最后由 lixiaolong 于 2014-5-1 22:48 编辑

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

$Str = 'start123a123b123c123end'

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

_ArrayDisplay($Test, UBound($Test))有没有其他的文本?

haijie1223 发表于 2014-5-1 23:08:43

StringSplit("start123a123b123c123end","123",1)

zch11230 发表于 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, 'src="(http://.*?\.jpg)', 3)
_ArrayDisplay($jpg, TimerDiff($time2))
页: [1]
查看完整版本: 【已解决】求一正则写法 在匹配之中再次匹配。