找回密码
 加入
搜索
查看: 4473|回复: 12

[效率算法] 请教个正则问题。。。。[已解决]

  [复制链接]
发表于 2013-10-30 00:22:42 | 显示全部楼层 |阅读模式
本帖最后由 xzxnovice 于 2013-11-5 08:19 编辑
[{"type":"hidden","name":"410acec","id":"t0ecf6c9"},{"type":"hidden","name":"39457e2","id":"s66045f2"},{"type":"hidden","name":"_t","value":1383019930},{"type":"hidden","name":"dfbe04c","value":"abcad67"}]
想把  name  id  和  name  value  
分两组匹配出来,放到数组
410acec  t0ecf6c9
39457e2 s66045f2
_t 1383019930
dfbe04c abcad67

自己写成这样,
$exp = StringRegExp($html, '"name":"(.*?)","value":"(.*?)"',4)
 
但不是我想要的结果
发表于 2013-10-30 00:52:37 | 显示全部楼层
现学现卖~http://www.autoitx.com/thread-39943-1-1.html
跟A版真学到太多~
(?:name|id|value)":\W?(.*?)(?:"|})

评分

参与人数 1金钱 +10 收起 理由
pusofalse + 10 看不懂,但加分就对了~

查看全部评分

发表于 2013-10-30 01:54:01 | 显示全部楼层
json数据不是有支持库吗?
 楼主| 发表于 2013-10-30 08:13:57 | 显示全部楼层
回复 2# haijie1223

谢谢,某些情况可以的,但我忘了说上面的数组次序会打乱的,name id value内容随机 。这样匹配出来来是分不出哪 个是id哪个是value..,最好整组匹配出来
 楼主| 发表于 2013-10-30 08:15:19 | 显示全部楼层
json数据不是有支持库吗?
annybaby 发表于 2013-10-30 01:54



    正则搞不定再考虑json操作,au也不是直接支持json,操作起来还是有点麻烦。
发表于 2013-10-30 10:40:33 | 显示全部楼层
回复 4# xzxnovice
    你把顺序打乱试试呗~~
发表于 2013-10-30 10:42:06 | 显示全部楼层
回复 4# xzxnovice
    相邻的应该是一组吧
发表于 2013-10-30 12:02:08 | 显示全部楼层
需要的结果并无包含关系,所以个人认为LZ用4的匹配模式并不方便~ 正如LS阿杰所说,相邻的应该是一组,我也认为大致如此,只是并非仅相邻,还应该是“双单”的数组下标顺序。

如果是需要更精准一些,不妨增加提取“name id value”,修改下阿杰的即可:
(?i)(name|id|value)":"?(.*?)["}]
 楼主| 发表于 2013-10-30 14:23:58 | 显示全部楼层
本帖最后由 xzxnovice 于 2013-10-30 14:53 编辑

回复 8# afan

这个可以,收下。。。。谢谢各位
另外:   
我用4的目的是这样的,可能我对4的功能不够理解。
先捉name id 这组
$exp = StringRegExp($html, '"name":"(.*?)","id":"(.*?)"', 4)
                If @error = 0 Then
                        For $i=0 To UBound($Exp)-1
                                $tmpary=$exp[$i]
                                
                                For $j=0 To UBound($tmpary)-1
                                ConsoleWrite($tmpary[$j]&@CRLF)
                        Next
                        ConsoleWrite(@CRLF)
                        Next 
                                
                EndIf   
结果为
"name":"410acec","id":"t0ecf6c9"
410acec
t0ecf6c9

"name":"39457e2","id":"s66045f2"
39457e2
s66045f2
然后捉name value 的
$exp = StringRegExp($html, '"name":"(.*?)","value":"(.*?)"', 4)
                If @error = 0 Then
                        For $i=0 To UBound($Exp)-1
                                $tmpary=$exp[$i]
                                
                                For $j=0 To UBound($tmpary)-1
                                ConsoleWrite($tmpary[$j]&@CRLF)
                        Next
                        ConsoleWrite(@CRLF)
                        Next 
                                
                EndIf  
由于正则不对,所以得不到我想要的结果,把中间一段的包含进去。
"name":"410acec","id":"t0ecf6c9"},{"type":"hidden","name":"39457e2","id":"s66045f2"},{"type":"hidden","name":"_t","value":1383019930},{"type":"hidden","name":"dfbe04c","value":"abcad67"
410acec","id":"t0ecf6c9"},{"type":"hidden","name":"39457e2","id":"s66045f2"},{"type":"hidden","name":"_t","value":1383019930},{"type":"hidden","name":"dfbe04c
abcad67
预期是这样的
"name":"_t","value":1383019930
_t
1383019930

"name":"dfbe04c","value":"abcad67"
dfbe04c
abcad67
应该修改正则所以达到目的吧,只把紧贴name id 和name value匹配出来,能否在我的思路上帮我改改。。
 楼主| 发表于 2013-10-30 17:17:51 | 显示全部楼层
需要的结果并无包含关系,所以个人认为LZ用4的匹配模式并不方便~ 正如LS阿杰所说,相邻的应该是一组,我也认 ...
afan 发表于 2013-10-30 12:02
$exp = StringRegExp($html, '"name":"([^}]*?)","value":"?(.*?)"?}', 4)
If @error = 0 Then
        For $i = 0 To UBound($exp) - 1
                $tmpary = $exp[$i]
                For $j = 0 To UBound($tmpary) - 1
                        ConsoleWrite($tmpary[$j] & @CRLF)
                Next
                ConsoleWrite(@CRLF)
        Next
EndIf

$exp = StringRegExp($html, '"name":"([^}]*?)","id":"?(.*?)"?}', 4)
If @error = 0 Then
        For $i = 0 To UBound($exp) - 1
                $tmpary = $exp[$i]
                For $j = 0 To UBound($tmpary) - 1
                        ConsoleWrite($tmpary[$j] & @CRLF)
                Next
                ConsoleWrite(@CRLF)
        Next
EndIf

"name":"_t","value":1383019930}
_t
1383019930

"name":"dfbe04c","value":"abcad67"}
dfbe04c
abcad67

"name":"410acec","id":"t0ecf6c9"}
410acec
t0ecf6c9

"name":"39457e2","id":"s66045f2"}
39457e2
s66045f2
改成这样是我想要的了,但不知是否精准。。
发表于 2013-10-31 08:39:51 | 显示全部楼层
一看就是  json 数据  ,直接用json支持库就好了啊。
发表于 2013-11-4 23:11:03 | 显示全部楼层
$sTemp = '[{"type":"hidden","name":"410acec","id":"t0ecf6c9"},{"type":"hidden","name":"39457e2","id":"s66045f2"},{"type":"hidden","name":"_t","value":1383019930},{"type":"hidden","name":"dfbe04c","value":"abcad67"}]'

; 去源字符串尾巴
$sTemp = StringTrimRight($sTemp, 2)

; 把数据按节拆分成数组
$aTemp = StringSplit($sTemp, "},{", 1)

; 遍历每一节
For $sTemp_Curr In $aTemp
        If StringRegExp($sTemp_Curr, 'name":"(.*)","id":("?.*"?)') Then
                $aTempReg = StringRegExp($sTemp_Curr, 'name":"(.*)","id":("?.*"?)', 1)
                ConsoleWrite("name:" & $aTempReg[0] & "    id:" & $aTempReg[1] & @CRLF)
        ElseIf StringRegExp($sTemp_Curr, 'name":"(.*)","value":("?.*"?)') Then
                $aTempReg = StringRegExp($sTemp_Curr, 'name":"(.*)","value":("?.*"?)', 1)
                ConsoleWrite("name:" & $aTempReg[0] & "    value:" & $aTempReg[1] & @CRLF)
        Else
                ; 没有匹配到
        EndIf
Next
 楼主| 发表于 2013-11-5 08:19:46 | 显示全部楼层
回复 12# mbdnmt


    也行。谢谢!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-10 14:48 , Processed in 0.085111 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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