找回密码
 加入
搜索
查看: 4311|回复: 10

[AU3基础] [已解决]麻烦高手帮忙精简下这个正则表达式

  [复制链接]
发表于 2010-6-15 18:48:24 | 显示全部楼层 |阅读模式
本帖最后由 kxing 于 2010-9-2 02:54 编辑

尝试用 (\n.*){n} 来减少患行的书写.
但是如果用()的话他也会写入数组中。
有没有类似于 . 这样的元字符同时匹配换行呢?
InetGet("http://mp3.sogou.com/music.so?query="&AnsiURLEncode("我的心好冷"),"source.htm")
Local $Str=FileRead("Source.htm")

$exp=StringRegExp($Str,' title\="(.+?)" action.*\n.*\n.*\n.*singer\="(.+?)".*\n.*title\="(.+?)" target.*\n.*\n.*\n.*'&"\'"&'(/down\.so\?.+?)'&"\'"&'.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*:(.+?)-.*\n.*\>(.+?)\<',3)
For $i=0 To UBound($exp)-6 Step 6
FileWriteLine("List.txt",$exp[$i]&" - "&$exp[$i+1]&" - "&$exp[$i+2]&" - "&$exp[$i+4]&" - "&$exp[$i+5])
FileWriteLine("List.txt",$exp[$i+3])
Next

Func AnsiURLEncode($str)
Local $astr, $i, $s2d, $sS = StringSplit($str, '')
For $i = 1 To UBound($sS) - 1
If StringRegExp($sS[$i], '[^\x00-\xff]') Then
$s2d = StringToBinary($sS[$i] & ' ') 
$astr &= '%' & StringMid($s2d, 3, 2) & '%' & StringMid($s2d, 5, 2) 
ElseIf StringRegExp($sS[$i], '[^\w]') Then
$s2d = StringToBinary($sS[$i]) 
$astr &= '%' & StringMid($s2d, 3, 2) 
Else
$astr &= $sS[$i]
EndIf
Next
$astr = StringReplace($astr, '%20', '+') ;转换空格的编码为'+'号,也可不要此行
Return $astr
EndFunc
多谢!!!!

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2010-6-15 21:12:04 | 显示全部楼层
不太明白,标记一下
发表于 2010-6-15 21:37:14 | 显示全部楼层
...有没有类似于 . 这样的元字符同时匹配换行呢?...
kxing 发表于 2010-6-15 18:48


(?s)
 楼主| 发表于 2010-6-15 23:23:59 | 显示全部楼层
afan大,什么意思呢
用这个(?s)可以任意字符包括换行吗?
这样会不会也同时写入数组中呢?
能否给各例子参考,多谢!
发表于 2010-6-15 23:24:52 | 显示全部楼层
. 匹配除 "\n" 之外的任何单个字符。要匹配包括 ’\n’ 在内的任何字符,请使用象 ’[.\n]’ 的模式
发表于 2010-6-16 00:21:18 | 显示全部楼层
回复 4# kxing


   试试 (?s).+ 就知道它匹配什么了~ 呵呵
 楼主| 发表于 2010-6-16 20:23:36 | 显示全部楼层
还是不太知道 (?s) 如何使用。。。
发表于 2010-6-16 22:08:53 | 显示全部楼层
本帖最后由 afan 于 2010-6-16 22:24 编辑

(?s) 之后的表达式 . 可以匹配任意字符,包括回车换行等。(?s).+ 将会匹配所有字符。
另外,(?s) 之后的表达式并不一定就会缩短表达式代码,也有可能会更长。
至于不匹配组,可以使用(?:exp) ,如 (?:\n.+),你一楼的那些重复多次想用精简点的就用 (?:\n.*){8}
 楼主| 发表于 2010-6-18 11:58:06 | 显示全部楼层
我用了(\n.*){8} 这样返回的数组就包含\n.*的内容了。
因为小括号内的字符被写入树祖了,这并不是我希望的。
发表于 2010-6-18 12:00:40 | 显示全部楼层
回复 9# kxing


    你非要用 (\n.*){8} 而不用我在8#所说的 (?:\n.*){8} 我也没办法
 楼主| 发表于 2010-6-22 10:12:18 | 显示全部楼层
好了,多谢了.这几天电脑出问题了.尚不来!!!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-23 12:17 , Processed in 0.071671 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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