找回密码
 加入
搜索
查看: 3759|回复: 13

[AU3基础] 求以下正则(已解决)

  [复制链接]
发表于 2011-2-16 12:42:59 | 显示全部楼层 |阅读模式
本帖最后由 yEn 于 2011-2-16 13:18 编辑

<TD class="show2 ip">219.130.219.148 &nbsp; [<A href="http://whois.domaintools.com/219.130.219.148" target=_blank>whois</A>]</TD>

要获取219.130.219.148 &nbsp; 中219.130.219.148 的正则是怎么写?谢谢大家赐教!
发表于 2011-2-16 13:01:08 | 显示全部楼层
$str = '<TD class="show2 ip">219.130.219.148   [<A href="http://whois.domaintools.com/219.130.219.148" target=_blank>whois</A>]</TD>'
$str = StringRegExpReplace($str, ".*?([0-9.]+)  .*", "\1")
MsgBox(0,0,$str)

评分

参与人数 1金钱 +30 贡献 +5 收起 理由
yEn + 30 + 5 请笑纳

查看全部评分

 楼主| 发表于 2011-2-16 13:15:16 | 显示全部楼层
谢谢。。问题解决
发表于 2011-2-16 13:21:31 | 显示全部楼层
这不是标准的IP地址匹配!
$sText = '<TD class="show2 ip">219.130.219.148   [<A href="http://whois.domaintools.com/219.130.219.148" target=_blank>whois</A>]</TD>'
$aRe = StringRegExp($sText, '(?:\d{1,3}\.){3}\d{1,3}(?=\h*? )', 3)
MsgBox(0, '', $aRe[0])
发表于 2011-2-16 17:56:17 | 显示全部楼层
我也来一个
$Str = '<TD class="show2 ip">219.130.219.148   [<A href="http://whois.domaintools.com/219.130.219.148" target=_blank>whois</A>]</TD>' & @CRLF
$Test = StringRegExp($str, '<.+>(.*?). ', 3)
If Not @Error Then MsgBox(0, 0, $Test[0])
发表于 2011-2-22 19:18:03 | 显示全部楼层
回复 5# lixiaolong


    今天刚开始学正则,想请问.*?的具体含义是什么,为什么这个跟.*不一样呢,一直搞不懂,还望指教!多谢
发表于 2011-2-22 19:59:27 | 显示全部楼层
回复 6# papapa314

我也是刚刚学习正则,具体说不清只能给你例子.

有一个例子

使用 StringRegExp()

字符:
<test>a</test> <test>b</test> <test>c</Test>

表达式:
1.<(?i)test>(.*?)</(?i)test>
2.<(?i)test>(.*)</(?i)test> 没有问号

#include <Array.au3>
Local $Str = '<test>a</test> <test>b</test> <test>c</Test>'
MsgBox(0, '原字符串', $Str)
Local $Test = StringRegExp($str, '<(?i)test>(.*?)</(?i)test>', 3)
Local $Test2 = StringRegExp($str, '<(?i)test>(.*)</(?i)test>', 3);没有问号
_ArrayDisplay($Test, UBound($Test))
_ArrayDisplay($Test2, UBound($Test));没有问号
发表于 2011-2-22 21:23:39 | 显示全部楼层
回复 7# lixiaolong


    先谢过,再来仔细研究!!!
发表于 2011-2-22 21:24:47 | 显示全部楼层
回复 7# lixiaolong

先行谢过,再仔细研究下!!
发表于 2011-2-22 21:52:45 | 显示全部楼层
回复 9# papapa314

你再看看这个“正则表达式30分钟入门教程”
http://deerchao.net/tutorials/regex/regex.htm

我刚才看了一下,很好理解.
里面有你需要的答案
发表于 2011-2-22 22:01:57 | 显示全部楼层
回复 9# papapa314
*  表示重复前面的表达式 0 到 n次,但是结果会尽可能的多,也就是说结果将尽可能的长。
*?表示重复前面的表达式 0 到 n次,但是结果将尽可能的少。

比如:\d 匹配 0 - 9 阿拉伯数字。
举例1:
源字符串 = ABC11111abc
表达式= \d*
这时得到的结果将是尽可能的多,所以结果为11111或空白

举例2:
源字符串 = ABC11111abc
表达式= \d*?
这时得到的结果将是尽可能的少,所以结果为1或空白。

至于为什么结果中会有空白这个就不用多说了吧!
发表于 2011-2-22 22:19:18 | 显示全部楼层
回复 11# 水木子

明白了,不加?的是贪婪匹配,尽可能的多匹配,加了问号的是懒惰匹配,尽可能的少匹配。
结果中有空白是因为*表示重复0到n次,重复0次的时候就是空白,要想去掉空白,得用+

谢谢水木子以及lixiaolong,今天刚开始学了一天,已经有不少收获了呵呵。
发表于 2011-2-22 22:22:19 | 显示全部楼层
回复 10# lixiaolong


    论坛的正则资料还是很多的,已经收集了不少了,问的问题也解决了,谢谢lixiaolong
发表于 2011-2-22 22:37:22 | 显示全部楼层
#include <array.au3>
$Str = '<TD class="show2 ip">219.130.219.148 &nbsp; [<A href="http://whois.domaintools.com/219.130.219.148" target=_blank>whois</A>]</TD>' & @CRLF
$Test = StringRegExpReplace($str, ".*?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) &nbsp.*", "\1")
MsgBox(0,0,$test)

模仿了一下大家的答案,也给出一个比较笨拙的答案,算是现学现用吧呵呵
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-10-2 14:29 , Processed in 0.091963 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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