runsnake 发表于 2013-1-24 20:45:15

au3的正则的后向引用怎么搞?

本帖最后由 runsnake 于 2013-1-24 20:54 编辑

字符串:'cab=cab cab=b'

如模式:(+)=\1
为什么不能匹配'cab=cab',而只匹配'cab'和'b'

而模式:()+=\1
为什么不能匹配'cab=b',而只匹配 'b'

是au3不支持,还是写法不对?

haijie1223 发表于 2013-1-24 21:00:21

正则匹配替换的时候才有逆向引用的,StringRegExpReplace。
正则匹配没有吧,说明里没有看到。

afan 发表于 2013-1-24 21:04:07

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

afan 发表于 2013-1-24 21:13:48

runsnake 发表于 2013-1-24 21:31:48

回复 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’,为什么这里返回的连‘=’号都没有?

annybaby 发表于 2013-1-24 21:35:46

回复 5# runsnake

只返回捕获的组(即圆括号内的)

afan 发表于 2013-1-24 21:36:19

=4 结果数组中的每个元素又都是数组,仔细看我贴的图就知道
没有=是因为匹配的有效组括号中不包含=

runsnake 发表于 2013-1-24 21:46:36

=4 结果数组中的每个元素又都是数组,仔细看我贴的图就知道
这个我明白了,原来是这样

#include <Array.au3>
$sString = 'cab=cab cab=b'
$aRes = StringRegExp($sString, '(+)=\1', 4)
_ArrayDisplay($aRes)


没有=是因为匹配的有效组括号中不包含=

这种看来跟别的语言里不一样呀,也就au3返回的只是后向引用的部分(当然说成只是括号里也一个意思)。我是在查找文本中的重复单词时,发现这个问题的。

haijie1223 发表于 2013-1-24 22:17:54

回复 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 发表于 2013-1-24 22:21:12

回复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

haijie1223 发表于 2013-1-24 22:43:10

回复 10# afan


    其中每个项都是数组。
中的数组两项:
cab=cab
cab
中数组两项:
b=b
b
能不能把中包含的两项赋给两个变量,把中两项赋给两个变量。

happytc 发表于 2013-1-24 22:45:32

回复 10# afan


    有点意思,居然au3还有指针数组的影子呢。
要直接访问这个包含数组的数组:Test里的一个元素,怎么办?
如数组‘Test’里的第一个元素值:‘b=b’

annybaby 发表于 2013-1-24 23:04:31

回复 11# haijie1223

可以直接赋值到一个变量的,那个变量就是一个新的数组,用索引引用即可
$aNewArr=$aRes

haijie1223 发表于 2013-1-25 07:36:09

回复 12# happytc


    我也是问的这个问题~

haijie1223 发表于 2013-1-25 07:37:05

回复 13# annybaby


    我试过了,不好使,9#有代码,你试下。和12#有同样的疑问~
页: [1] 2
查看完整版本: au3的正则的后向引用怎么搞?