au3的正则的后向引用怎么搞?
本帖最后由 runsnake 于 2013-1-24 20:54 编辑字符串:'cab=cab cab=b'
如模式:(+)=\1
为什么不能匹配'cab=cab',而只匹配'cab'和'b'
而模式:()+=\1
为什么不能匹配'cab=b',而只匹配 'b'
是au3不支持,还是写法不对? 正则匹配替换的时候才有逆向引用的,StringRegExpReplace。
正则匹配没有吧,说明里没有看到。 本帖最后由 afan 于 2013-1-24 21:18 编辑
表达式不变的前提下,匹配模式用4即可。
或者改表达式#include <Array.au3>
Local $Str = 'cab=cab cab=b'
Local $Test = StringRegExp($str, '((+)=\2)', 3)
_ArrayDisplay($Test, UBound($Test)) 回复 3# afan
给整晕了,如下面的代码:
#include <Array.au3>
$sString = 'cab=cab cab=b'
$aRes = StringRegExp($sString, '(+)=\1', 1)
_ArrayDisplay($aRes)
flag=1时,返回的是:‘cab’
flag=2时,反回的是:‘cab=cab’和 ‘cab’
flag=3时,返回的是:‘cab’和‘b’
flag=4时,返回的是:两个空的数组元素值
麻烦能不能详细说明一下,为什么会有这样?
比如flag=1时,我想象的是该返回‘cab=cab’,为什么这里返回的连‘=’号都没有? 回复 5# runsnake
只返回捕获的组(即圆括号内的) =4 结果数组中的每个元素又都是数组,仔细看我贴的图就知道
没有=是因为匹配的有效组括号中不包含= =4 结果数组中的每个元素又都是数组,仔细看我贴的图就知道
这个我明白了,原来是这样
#include <Array.au3>
$sString = 'cab=cab cab=b'
$aRes = StringRegExp($sString, '(+)=\1', 4)
_ArrayDisplay($aRes)
没有=是因为匹配的有效组括号中不包含=
这种看来跟别的语言里不一样呀,也就au3返回的只是后向引用的部分(当然说成只是括号里也一个意思)。我是在查找文本中的重复单词时,发现这个问题的。 回复 7# afan
真是被搞混了~flag=4的时候,每一项都是一个数组,上面的例子里面里面又有两个值。
假如我想把这个两个值分别赋给两个变量的话,又如何操作,试了一下下面的没有效果。#include <Array.au3>
$sString = 'cab=cab cab=b'
$aRes = StringRegExp($sString, '(+)=\1', 4)
Dim $test=$aRes
_ArrayDisplay($test)
_ArrayDisplay($test) 回复afan
真是被搞混了~flag=4的时候,每一项都是一个数组,上面的例子里面里面又有两个值。 ...
haijie1223 发表于 2013-1-24 22:17 http://www.autoitx.com/images/common/back.gif
_ArrayDisplay($test) 就可以了…#include <Array.au3>
Local $Str = 'cab=cab cab=b'
Local $Test = StringRegExp($str, '(+)=\1', 4)
If Not @Error Then
MsgBox(0, '匹配数量: ' & UBound($Test), '其中每个元素均为单独的数组')
For $i = 0 To UBound($Test) - 1
_ArrayDisplay($Test[$i], '元素 - $Test[' & $i & ']')
Next
EndIf 回复 10# afan
其中每个项都是数组。
中的数组两项:
cab=cab
cab
中数组两项:
b=b
b
能不能把中包含的两项赋给两个变量,把中两项赋给两个变量。 回复 10# afan
有点意思,居然au3还有指针数组的影子呢。
要直接访问这个包含数组的数组:Test里的一个元素,怎么办?
如数组‘Test’里的第一个元素值:‘b=b’ 回复 11# haijie1223
可以直接赋值到一个变量的,那个变量就是一个新的数组,用索引引用即可
$aNewArr=$aRes 回复 12# happytc
我也是问的这个问题~ 回复 13# annybaby
我试过了,不好使,9#有代码,你试下。和12#有同样的疑问~
页:
[1]
2