找回密码
 加入
搜索
查看: 9038|回复: 28

[效率算法] 还是正则表达式的问题,定义好两边,取中间的值,(完了,结吧)

 火.. [复制链接]
发表于 2011-4-23 10:18:36 | 显示全部楼层 |阅读模式
本帖最后由 lluxury 于 2011-4-23 13:29 编辑

<font color=lime><b>你好</b></font>

要中间的汉字

这是我写的 \b<font color=lime><b>\b.*\</b></font>\b ,失败
发表于 2011-4-23 10:28:25 | 显示全部楼层
仔细看帮助:
;选项 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
发表于 2011-4-23 10:31:25 | 显示全部楼层
(?<=<(\w+)>).*(?=<\/\1>)
 楼主| 发表于 2011-4-23 10:33:07 | 显示全部楼层
还是5173的精炼啊,佩服
 楼主| 发表于 2011-4-23 10:42:33 | 显示全部楼层
本帖最后由 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>
发表于 2011-4-23 10:55:20 | 显示全部楼层
回复 5# lluxury
因为没有源码,无法给出最简单的,如果真如你说的大部分是变动的,能否保证你1楼给出的提取值唯一都是问题。
但是只是针对你5楼的字符串是可以通过数组来确定的,你先返回数组里每个元素的值 你判断出第几个,然后就可以单独返回数组元素就可以了,比如 $array[3]    返回数组的第4个元素
 楼主| 发表于 2011-4-23 11:02:53 | 显示全部楼层
谢谢楼上,一楼这串<font color=lime><b>你好</b></font>是可以保证的,虽然里面的汉字会变;
源码还在5楼,都是类似的,我多贴了点
发表于 2011-4-23 11:10:45 | 显示全部楼层
<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种样式出现的话,完全可以只匹配一种,如果匹配不到,程序里面直接返回第二种就可以了,
比如:直接匹配是否含有登陆的字符串,如果没有,那么中间的字符串肯定是你好
 楼主| 发表于 2011-4-23 11:15:06 | 显示全部楼层
本帖最后由 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)
发表于 2011-4-23 11:20:44 | 显示全部楼层
本帖最后由 love5173 于 2011-4-23 11:26 编辑

呵呵,给我网站,跟你要提取的东西,我给你代码吧,这样比空说好一些
看见网站了,呵呵,没注意
 楼主| 发表于 2011-4-23 11:28:34 | 显示全部楼层
好,我消息发给你吧,比较私人的一个网站,不大公开的
 楼主| 发表于 2011-4-23 11:31:02 | 显示全部楼层
本帖最后由 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
发表于 2011-4-23 11:36:35 | 显示全部楼层
lime><b>([^<]+)
 楼主| 发表于 2011-4-23 11:52:49 | 显示全部楼层
取了一下,还多了点,我再研究下

lime><b>王重阳的剑
发表于 2011-4-23 11:56:26 | 显示全部楼层
回复 14# lluxury
什么地方多了,我没测试,但是提取不会多的?
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-2 06:19 , Processed in 0.082456 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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