骗子 发表于 2011-2-25 16:52:38

如何用正则获取这个网址[已解决]

本帖最后由 骗子 于 2011-2-27 15:19 编辑

其实就是用了《水木子》给的代码,问题虽然解决了,但是还是有点疑问,在9楼,有知道的麻烦告诉我下



源代码:
</div>
<iframe id="ifm0" frameborder="0" width="810" scrolling="no" height="810" style="top: 0px; left:0px;" src="xxxxxx"></iframe>
</div>

想获取上面xxxxx的部分,因为中间的东西那部分是变化的一个网址,很长,我简化成XXXXX,

我的想法是用正则获取这个地址然后在浏览器中打开

补充一下,这个网页有多个 src="xxxxxx",但是只有一个<iframe id="ifm0" frameborder="0" width="810" scrolling="no" height="810" style="top: 0px; left:0px;" src="xxxxxx"></iframe>只有一个,我按照楼下的三个大侠的正则只能确认到第一个src="xxxxxx",但这个不是我想要的
我根据几位热心的兄弟给的提示在 au3.REHelper中自己修改了一下,可以找到1条记录,也就是我想要的,如下图

但是我在脚本$aRe = StringRegExp($sHTML, '(?i)(?<=left:0px;" src=")[^"]+', 3)
MsgBox (0,"",$aRe)
MsgBox (0,"",$aRe)
_ArrayDisplay($aRe, 'Default Search')执行后报错MsgBox (0,"",$aRe)出现1说明应该找到了,但是MsgBox (0,"",$aRe)就报错了
F:\autoit3\2012\aaaa.au3 (16) : ==> ???????????.:
MsgBox (0,"",$aRe)
MsgBox (0,"",$aRe^ ERROR

这个是怎么回事


minterz 发表于 2011-2-25 17:12:39

_StringBetween
自带的函数,很方便,换行可以用@crlf代替

水木子 发表于 2011-2-25 17:23:08

$sText = '</div>' & @CRLF & _
                '<iframe id="ifm0" frameborder="0" width="810" scrolling="no" height="810" style="top: 0px; left:0px;" src="www.autoitx.com"></iframe>' & @CRLF & _
                "</div>'"

$aRe = StringRegExp($sText, '(?i)(?<=src=")[^"]+', 3)
ShellExecute($aRe)

xowen 发表于 2011-2-25 17:25:45

src="(.*?)"

3mile 发表于 2011-2-25 19:45:52

(?i)(?<=left:0px;"\hsrc=")[^"]+

gto250 发表于 2011-2-25 20:15:30

不懂正则,帮你顶上,顺便学习学习

papapa314 发表于 2011-2-25 21:25:35

我也来一个
(?<=src=").+(?="><)

呵呵最近很喜欢正则

lixiaolong 发表于 2011-2-25 23:46:05

表达式 = (?s).+?left:0px;" src="(.*?)".+
替换   = $1

骗子 发表于 2011-2-27 15:13:15

本帖最后由 骗子 于 2011-2-27 15:14 编辑

解决方案:#include <Array.au3>
$sText = '</div>' & @CRLF & _
                '<iframe id="ifm0" frameborder="0" width="810" scrolling="no" height="810" style="top: 0px; left:0px;" src="http://apps.manyou.com/1061199"></iframe>' & @CRLF & _
                "</div>'"
$aRe = StringRegExp($sText, '(?i)(?<=src=")[^"]+', 3)
_ArrayDisplay($aRe, "符合src=“xxxx”类型的内容")
MsgBox(0,"",$aRe)


疑问:#include <Array.au3>
$sText = '</div>' & @CRLF & _
                '<iframe id="ifm0" frameborder="0" width="810" scrolling="no" height="810" style="top: 0px; left:0px;" src="http://apps.manyou.com/1061199"></iframe>' & @CRLF & _
                "</div>'"
$aRe = StringRegExp($sText, '(?s).+?left:0px;" src="(.*?)".+', 3)
_ArrayDisplay($aRe, "符合src=“xxxx”类型的内容"),有效
但是当$sText = _IEBodyReadHTML ($oIE)就没有内容显示,用msgbox的话报错,就像一楼的#include <Array.au3>
$sText = _IEBodyReadHTML ($oIE) ;读取网页的源文件
$aRe = StringRegExp($sText, '(?s).+?left:0px;" src="(.*?)".+', 3)
_ArrayDisplay($aRe, "符合src=“xxxx”类型的内容")

骗子 发表于 2011-2-27 15:20:43

难道问题出在读取网页源代码的内容有换行?但是又不应该啊,一楼的源代码是我直接复制出来的

水木子 发表于 2011-2-27 15:32:15

问题究竟解决了吗?{:face (461):}

骗子 发表于 2011-2-28 14:35:29

#include <Array.au3>
$sText = '</div>' & @CRLF & _
                '<iframe id="ifm0" frameborder="0" width="810" scrolling="no" height="810" style="top: 0px; left:0px;" src="http://apps.manyou.com/1061199"></iframe>' & @CRLF & _
                "</div>'"
$aRe = StringRegExp($sText, '(?s).+?left:0px;" src="(.*?)".+', 3)
_ArrayDisplay($aRe, "符合src=“xxxx”类型的内容")能找到符合的内容,有显示

但是下面的就不行了,找不到符合的。问题是上面的内容就是我从网页源代码中摘出来的,应该都可以才对啊
#include <Array.au3>
#include <IE.au3>
$oIE = _IECreate("http://www.iopq.com/userapp-app-id-1061199.html")
$sText = _IEBodyReadHTML ($oIE) ;读取网页的源文件
$aRe = StringRegExp($sText, '(?s).+?left:0px;" src="(.*?)".+', 3)
_ArrayDisplay($aRe, "符合src=“xxxx”类型的内容")
页: [1]
查看完整版本: 如何用正则获取这个网址[已解决]