顽固不化 发表于 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等高手帮忙

3mile 发表于 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)

kxing 发表于 2010-9-5 20:51:52

$a='-oAAA bbb -yHHH -zKKK'
$sp=StringRegExp($a,"-o(.+?) -",3)
If @Error Then Exit
MsgBox(0,'',$sp)

afan 发表于 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, '.*-([^\h]+\h+[^\h]+).*', '$1')
EndFunc   ;==>Str

顽固不化 发表于 2010-9-6 19:58:46


afan 发表于 2010-9-5 22:30 http://www.autoitx.com/images/common/back.gif

我感谢楼上的各位答复的朋友。
我的意思没表达清楚,深表歉意。
其实这是一个7z自解压的参数串,-o后面跟着一个路径,表示将要解压压缩包到这个路径上,路径中可能有空格,也可能没有空格,所以我加了个空格,而-o参数有可能排在所有参数的第一、或者最后,还有中间。因此在路径这个字符串没有像我1楼所写的那么整齐。

afan 发表于 2010-9-6 20:18:37

本帖最后由 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

绿色风 发表于 2010-9-6 20:47:21

看的一头雾水,今天刚开始接触这个正则式。。。。。。

   感觉是要多练,多测,多想,再搜,再问...

顽固不化 发表于 2010-9-7 00:01:59

回复顽固不化
afan 发表于 2010-9-6 20:18 http://www.autoitx.com/images/common/back.gif


佩服的五体投地。。。谢谢afan

liufenglg 发表于 2010-9-23 10:21:06

本帖最后由 liufenglg 于 2010-9-23 10:27 编辑

回复 6# afan


    真是太牛了
能 '.*[-|\/]([^-\/]+[^\h])?(?:\h*[-|\/].+|\h*$)', '$1'   加个注解就更好了
-或者/
o或者O
或者没有-或/
不知道了...

rolaka 发表于 2010-9-23 11:10:05

本帖最后由 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

shenrenba 发表于 2010-9-23 11:11:57

不知道我这样的正则是不是有什么问题?
["|']?(.+?)["|'|-]

rolaka 发表于 2010-9-23 11:16:59

本帖最后由 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的不能匹配 ("-["|']?(.+?)["|'|-]"依然...)



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

shenrenba 发表于 2010-9-23 13:00:27

都有问题我修改后的 会覆盖 在看什么情况 A大的 不能已o开头
A大

修改后我的

afan 发表于 2010-9-23 13:16:26

都有问题我修改后的 会覆盖 在看什么情况 A大的 不能已o开头
A大

修改后我的
shenrenba 发表于 2010-9-23 13:00 http://www.autoitx.com/images/common/back.gif


以“o”开头本来就是不要匹配的,参数必须以“-”或“/”打头
另外,最外面的一对引号是不要的

转角遇到囜 发表于 2010-9-23 17:49:49

学习了,原谅是这样啊!
页: [1] 2
查看完整版本: 请问正则高手,取参数的正则表达式