请问正则高手,取参数的正则表达式
$A='-oAAA bbb -yHHH -zKKK'
$B=-'yHHH -oAAA bbb-zKKK'
$C='-yHHH -zKKK -oAAA bbb'
要求以上3中排列方式都能取出-o后面的‘AAA BBB’
求afan等高手帮忙 不大明白你的意思。只能靠猜。
#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)
$a='-oAAA bbb -yHHH -zKKK'
$sp=StringRegExp($a,"-o(.+?) -",3)
If @Error Then Exit
MsgBox(0,'',$sp) $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, '.*-([^\h]+\h+[^\h]+).*', '$1')
EndFunc ;==>Str
afan 发表于 2010-9-5 22:30 http://www.autoitx.com/images/common/back.gif
我感谢楼上的各位答复的朋友。
我的意思没表达清楚,深表歉意。
其实这是一个7z自解压的参数串,-o后面跟着一个路径,表示将要解压压缩包到这个路径上,路径中可能有空格,也可能没有空格,所以我加了个空格,而-o参数有可能排在所有参数的第一、或者最后,还有中间。因此在路径这个字符串没有像我1楼所写的那么整齐。 本帖最后由 afan 于 2010-9-6 21:36 编辑
回复 5# 顽固不化
Local $C = , $out
$C = '-oC:\test 文件夹1 -yHHH -zKKK'
$C = '-yHHH /oC:\test 文件夹1-zKKK'
$C = '-yHHH -zKKK -oC:\test 文件夹1'
$C = '-oC:\test 文件夹1'
$C = '-o"C:\test 文件夹1" -yHHH -zKKK'
$C = '-yHHH -o"C:\test 文件夹1"/zKKK'
$C = '-yHHH -zKKK /o"C:\test 文件夹1" '
$C = '-o"C:\test 文件夹1"'
$C = '-o'
$C = '-z'
For $i = 1 To $C
$P = _GetPath($C[$i])
$out &= '参数字符串:"' & $C[$i] & '"' & @CRLF & '提取到路径:"' & $P & '"' & @CRLF & @CRLF
Next
MsgBox(0, 0, $out)
Func _GetPath($str)
$str = StringRegExpReplace($str, '.*[-|\/]([^-\/]+[^\h])?(?:\h*[-|\/].+|\h*$)', '$1')
If @extended > 0 Then Return $str
Return SetError(1, 0, -1)
EndFunc ;==>_GetPath
看的一头雾水,今天刚开始接触这个正则式。。。。。。
感觉是要多练,多测,多想,再搜,再问... 回复顽固不化
afan 发表于 2010-9-6 20:18 http://www.autoitx.com/images/common/back.gif
佩服的五体投地。。。谢谢afan 本帖最后由 liufenglg 于 2010-9-23 10:27 编辑
回复 6# afan
真是太牛了
能 '.*[-|\/]([^-\/]+[^\h])?(?:\h*[-|\/].+|\h*$)', '$1' 加个注解就更好了
-或者/
o或者O
或者没有-或/
不知道了... 本帖最后由 rolaka 于 2010-9-23 11:11 编辑
Func _GetPath($str)
$str = StringRegExpReplace($str, '.*[-|\/](?#匹配各种-o)([^-\/]+[^\h])?(?#懒惰匹配不包含-或斜杠 并以非空白符结尾的字串)(?:\h*[-|\/].+|\h*$)(?#一直到下一条指令开始或字符串结束 ?:代表不捕获匹配)', '$1')
If @extended > 0 Then Return $str
Return SetError(1, 0, -1)
EndFunc ;==>_GetPath
不知道我这样的正则是不是有什么问题?
["|']?(.+?)["|'|-]
本帖最后由 rolaka 于 2010-9-23 11:28 编辑
不知道我这样的正则是不是有什么问题?
shenrenba 发表于 2010-9-23 11:11 http://www.autoitx.com/images/common/back.gif
...
-oc:\o\c
-o后跟路径 直接结尾的没有匹配
路径里带o的不能匹配 ("-["|']?(.+?)["|'|-]"依然...)
设定的判断条件有点不完整... 都有问题我修改后的 会覆盖 在看什么情况 A大的 不能已o开头
A大
修改后我的
都有问题我修改后的 会覆盖 在看什么情况 A大的 不能已o开头
A大
修改后我的
shenrenba 发表于 2010-9-23 13:00 http://www.autoitx.com/images/common/back.gif
以“o”开头本来就是不要匹配的,参数必须以“-”或“/”打头
另外,最外面的一对引号是不要的 学习了,原谅是这样啊!
页:
[1]
2