还是正则表达式的问题,定义好两边,取中间的值,(完了,结吧)
本帖最后由 lluxury 于 2011-4-23 13:29 编辑<font color=lime><b>你好</b></font>
要中间的汉字
这是我写的 \b<font color=lime><b>\b.*\</b></font>\b ,失败 仔细看帮助:
;选项 1, 使用偏移量
$nOffset = 1
While 1
$array = StringRegExp('<test>a</test> <test>b</test> <test>c</Test>', '<(?i)test>(.*?)</(?i)test>', 1, $nOffset)
If @error = 0 Then
$nOffset = @extended
Else
ExitLoop
EndIf
for $i = 0 to UBound($array) - 1
msgbox(0, "正则表达式选项 1 测试 " & $i, $array[$i])
Next
WEnd
;选项 2, 单返回, php/preg_match() 样式
$array = StringRegExp('<test>a</test> <test>b</test> <test>c</Test>', '<(?i)test>(.*?)</(?i)test>', 2)
for $i = 0 to UBound($array) - 1
msgbox(0, "正则表达式选项 2 测试 " & $i, $array[$i])
Next
;选项 3, 全程返回, 旧的 AutoIt 样式
$array = StringRegExp('<test>a</test> <test>b</test> <test>c</Test>', '<(?i)test>(.*?)</(?i)test>', 3)
for $i = 0 to UBound($array) - 1
msgbox(0, "正则表达式选项 3 测试 " & $i, $array[$i])
Next
;选项 4, 全程返回, php/preg_match_all() 样式
$array = StringRegExp('F1oF2oF3o', '(F.o)*?', 4)
for $i = 0 to UBound($array) - 1
$match = $array[$i]
for $j = 0 to UBound($match) - 1
msgbox(0, "正则表达式选项 4 测试 " & $i & ',' & $j, $match[$j])
Next
Next (?<=<(\w+)>).*(?=<\/\1>) 还是5173的精炼啊,佩服 本帖最后由 lluxury 于 2011-4-23 11:03 编辑
再问一下,这一句,要获得"你好,"有什么办法,大部分都是会变动的,不变的,只有我在一楼发的部分
·08时42分、<font color=#6495ED><b>欢迎</b></font> 登陆 <font color=lime><b>你好</b></font>
或者说,我只想取绿字的部分,不用正则也可以,求解,我自己也在试,出来的话,我会发结果的
源码
<tr>
<td width="100%">·08时42分、<font color=#6495ED><b>欢迎</b></font> 登陆 <font color=lime><b>你好</b></font></td>
</tr>
<tr>
<td width="100%">·09时37分、<font color=#6495ED><b>欢迎</b></font> 登陆 <font color=lime><b>用户</b></font></td>
</tr> 回复 5# lluxury
因为没有源码,无法给出最简单的,如果真如你说的大部分是变动的,能否保证你1楼给出的提取值唯一都是问题。
但是只是针对你5楼的字符串是可以通过数组来确定的,你先返回数组里每个元素的值 你判断出第几个,然后就可以单独返回数组元素就可以了,比如 $array 返回数组的第4个元素 谢谢楼上,一楼这串<font color=lime><b>你好</b></font>是可以保证的,虽然里面的汉字会变;
源码还在5楼,都是类似的,我多贴了点 <tr>
<td width="100%">·08时42分、<font color=#6495ED><b>欢迎</b></font> 登陆 <font color=lime><b>你好</b></font></td>
</tr>
<tr>
<td width="100%">·09时37分、<font color=#6495ED><b>欢迎</b></font> 登陆 <font color=lime><b>用户</b></font></td>
</tr>
以上内容会同时出现吗,还是说这是你举例中间的汉字会变而已?
说实话,如果只是要判断里面是什么内容,并且只有2种样式出现的话,完全可以只匹配一种,如果匹配不到,程序里面直接返回第二种就可以了,
比如:直接匹配是否含有登陆的字符串,如果没有,那么中间的字符串肯定是你好 本帖最后由 lluxury 于 2011-4-23 11:19 编辑
上面的源码会同时出现啊,而且有几十组
我参考网的流传的一个格式,模仿人家的写法,但也失败了,也有是说,一个网页里,类似的字符串很多,只是里面的汉字不一样,我现在就想把里面的汉字取出来
$array= StringRegExp($sHTML, "<(?i)font color=lime><b>(.*?)</b></<(?i)font>",1)
人家的源码
#include <IE.au3>
Filedelete ("Tq.txt")
$Url="http://www.soso.com/tb.q"
$oIE = _IECreate ($url, 0, 0)
$sHTML = _IEBodyReadHTML ($oIE)
$array= StringRegExp($sHTML, "<(?i)strong class=fs_14>(.*?)</(?i)strong>",1)
; <strong class="fs_14">阴,18℃</strong>
for $i = 0 to UBound($array) - 1
$tqtemp = $array[$i]
Next
$tqtoday = StringReplace($tqtemp, " ", " ")
msgbox (32,"天气",$tqtoday)
_IEQuit ($oIE) 本帖最后由 love5173 于 2011-4-23 11:26 编辑
呵呵,给我网站,跟你要提取的东西,我给你代码吧,这样比空说好一些
看见网站了,呵呵,没注意 好,我消息发给你吧,比较私人的一个网站,不大公开的 本帖最后由 lluxury 于 2011-4-23 11:32 编辑
问题基本确定,下面的代码可以成功,现在就是多了<b></b>会干扰失败,我在考虑,有了<b>的写法,肯定不能用<b>做过滤....
$array = StringRegExp('<font color=lime>你好</font>', '<(?i)font color=lime>(.*?)</(?i)font>', 3)
for $i = 0 to UBound($array) - 1
msgbox(0, "正则测试 标志值 3 - " & $i, $array[$i])
Next lime><b>([^<]+) 取了一下,还多了点,我再研究下
lime><b>王重阳的剑 回复 14# lluxury
什么地方多了,我没测试,但是提取不会多的?
页:
[1]
2