找回密码
 加入
搜索
查看: 8445|回复: 19

[AU3基础] 请问正则高手,取参数的正则表达式

 火.. [复制链接]
发表于 2010-9-5 20:00:43 | 显示全部楼层 |阅读模式
$A='-oAAA bbb -yHHH -zKKK'
$B=-'yHHH -oAAA bbb  -zKKK'
$C='-yHHH -zKKK -oAAA bbb'
要求以上3中排列方式都能取出-o后面的‘AAA BBB’

求afan等高手帮忙
发表于 2010-9-5 20:15:54 | 显示全部楼层
不大明白你的意思。只能靠猜。
#include <array.au3>
$str="$A='-oAAA bbb -yHHH -zKKK'"& _
"$B=-'yHHH -oAAA bbb  -zKKK'"& _
"$C='-yHHH -zKKK -oAAA bbb'"
$r=StringRegExp($str,'-o\w{3}\s\w{3}',3)
_ArrayDisplay($r)

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

发表于 2010-9-5 20:51:52 | 显示全部楼层
$a='-oAAA bbb -yHHH -zKKK'
$sp=StringRegExp($a,"-o(.+?) -",3)
If @Error Then Exit
MsgBox(0,'',$sp[0])

评分

参与人数 1金钱 +15 收起 理由
afan + 15

查看全部评分

发表于 2010-9-5 22:30:42 | 显示全部楼层
$A = '-oAAA bbb -yHHH -zKKK'
$B = '-yHHH -oAAA bbb  -zKKK'
$C = '-yHHH -zKKK -oAAA bbb'

MsgBox(0, $A, '"' & Str($A) & '"')
MsgBox(0, $B, '"' & Str($B) & '"')
MsgBox(0, $C, '"' & Str($C) & '"')

Func Str($str)
        Return StringRegExpReplace($str, '.*-[o|O]([^\h]+\h+[^\h]+).*', '$1')
EndFunc   ;==>Str

评分

参与人数 2金钱 +35 收起 理由
顽固不化 + 5 意思一下
水木子 + 30

查看全部评分

 楼主| 发表于 2010-9-6 19:58:46 | 显示全部楼层
afan 发表于 2010-9-5 22:30


我感谢楼上的各位答复的朋友。
我的意思没表达清楚,深表歉意。
其实这是一个7z自解压的参数串,-o后面跟着一个路径,表示将要解压压缩包到这个路径上,路径中可能有空格,也可能没有空格,所以我加了个空格,而-o参数有可能排在所有参数的第一、或者最后,还有中间。因此在路径这个字符串没有像我1楼所写的那么整齐。
发表于 2010-9-6 20:18:37 | 显示全部楼层
本帖最后由 afan 于 2010-9-6 21:36 编辑

回复 5# 顽固不化


   

Local $C[11] = [10], $out
$C[1] = '-oC:\test 文件夹1 -yHHH -zKKK'
$C[2] = '-yHHH /oC:\test 文件夹1  -zKKK'
$C[3] = '-yHHH -zKKK -oC:\test 文件夹1'
$C[4] = '-oC:\test 文件夹1'
$C[5] = '-o"C:\test 文件夹1" -yHHH -zKKK'
$C[6] = '-yHHH -o"C:\test 文件夹1"  /zKKK'
$C[7] = '-yHHH -zKKK /o"C:\test 文件夹1" '
$C[8] = '-o"C:\test 文件夹1"'
$C[9] = '-o'
$C[10] = '-z'

For $i = 1 To $C[0]
        $P = _GetPath($C[$i])
        $out &= '参数字符串:"' & $C[$i] & '"' & @CRLF & '提取到路径:"' & $P & '"' & @CRLF & @CRLF
Next
MsgBox(0, 0, $out)

Func _GetPath($str)
        $str = StringRegExpReplace($str, '.*[-|\/][o|O]([^-\/]+[^\h])?(?:\h*[-|\/].+|\h*$)', '$1')
        If @extended > 0 Then Return $str
        Return SetError(1, 0, -1)
EndFunc   ;==>_GetPath

评分

参与人数 3金钱 +90 贡献 +5 收起 理由
Duvet + 30 + 5 學習了
liufenglg + 30
顽固不化 + 30 高手一出马 从容定天下

查看全部评分

发表于 2010-9-6 20:47:21 | 显示全部楼层
看的一头雾水,今天刚开始接触这个正则式。。。。。。
  
   感觉是要多练,多测,多想,再搜,再问...
 楼主| 发表于 2010-9-7 00:01:59 | 显示全部楼层
回复  顽固不化
afan 发表于 2010-9-6 20:18



佩服的五体投地。。。谢谢afan
发表于 2010-9-23 10:21:06 | 显示全部楼层
本帖最后由 liufenglg 于 2010-9-23 10:27 编辑

回复 6# afan


    真是太牛了
能 '.*[-|\/][o|O]([^-\/]+[^\h])?(?:\h*[-|\/].+|\h*$)', '$1'   加个注解就更好了
-或者/
o或者O
或者没有-或/
不知道了...
发表于 2010-9-23 11:10:05 | 显示全部楼层
本帖最后由 rolaka 于 2010-9-23 11:11 编辑


Func _GetPath($str)
        $str = StringRegExpReplace($str, '.*[-|\/][o|O](?#匹配各种-o)([^-\/]+[^\h])?(?#懒惰匹配不包含-或斜杠 并以非空白符结尾的字串)(?:\h*[-|\/].+|\h*$)(?#一直到下一条指令开始或字符串结束 ?:代表不捕获匹配)', '$1')
        If @extended > 0 Then Return $str
        Return SetError(1, 0, -1)
EndFunc   ;==>_GetPath

评分

参与人数 2金钱 +50 收起 理由
liufenglg + 30
afan + 20 谢谢帮忙

查看全部评分

发表于 2010-9-23 11:11:57 | 显示全部楼层
不知道我这样的正则是不是有什么问题?
[o|O]["|']?(.+?)["|'|-]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2010-9-23 11:16:59 | 显示全部楼层
本帖最后由 rolaka 于 2010-9-23 11:28 编辑
不知道我这样的正则是不是有什么问题?
shenrenba 发表于 2010-9-23 11:11

...
-oc:\o\c
-o后跟路径 直接结尾的没有匹配

路径里带o的不能匹配 ("-[o|O]["|']?(.+?)["|'|-]"依然...)



设定的判断条件有点不完整...

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2010-9-23 13:00:27 | 显示全部楼层
都有问题  我修改后的 会覆盖 在看什么情况 A大的 不能已o开头
A大

修改后我的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2010-9-23 13:16:26 | 显示全部楼层
都有问题  我修改后的 会覆盖 在看什么情况 A大的 不能已o开头
A大

修改后我的
shenrenba 发表于 2010-9-23 13:00



以“o”开头本来就是不要匹配的,参数必须以“-”或“/”打头
另外,最外面的一对引号是不要的
发表于 2010-9-23 17:49:49 | 显示全部楼层
学习了,原谅是这样啊!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-23 08:34 , Processed in 0.100666 second(s), 32 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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