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

[AU3基础] au3的正则的后向引用怎么搞?

 火.. [复制链接]
发表于 2013-1-24 20:45:15 | 显示全部楼层 |阅读模式
本帖最后由 runsnake 于 2013-1-24 20:54 编辑

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

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

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

是au3不支持,还是写法不对?
发表于 2013-1-24 21:00:21 | 显示全部楼层
正则匹配替换的时候才有逆向引用的,StringRegExpReplace。
正则匹配没有吧,说明里没有看到。
发表于 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, '(([abc]+)=\2)', 3)
_ArrayDisplay($Test, UBound($Test))
发表于 2013-1-24 21:13:48 | 显示全部楼层

本帖子中包含更多资源

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

×
 楼主| 发表于 2013-1-24 21:31:48 | 显示全部楼层
回复 3# afan


    给整晕了,如下面的代码:

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


flag=1时,返回的是:‘cab’
flag=2时,反回的是:‘cab=cab’和 ‘cab’
flag=3时,返回的是:‘cab’和‘b’
flag=4时,返回的是:两个空的数组元素值

麻烦能不能详细说明一下,为什么会有这样?
比如flag=1时,我想象的是该返回‘cab=cab’,为什么这里返回的连‘=’号都没有?
发表于 2013-1-24 21:35:46 | 显示全部楼层
回复 5# runsnake

只返回捕获的组(即圆括号内的)
发表于 2013-1-24 21:36:19 | 显示全部楼层
=4 结果数组中的每个元素又都是数组,仔细看我贴的图就知道
没有=是因为匹配的有效组括号中不包含=
 楼主| 发表于 2013-1-24 21:46:36 | 显示全部楼层
=4 结果数组中的每个元素又都是数组,仔细看我贴的图就知道

这个我明白了,原来是这样

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

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

这种看来跟别的语言里不一样呀,也就au3返回的只是后向引用的部分(当然说成只是括号里也一个意思)。我是在查找文本中的重复单词时,发现这个问题的。
发表于 2013-1-24 22:17:54 | 显示全部楼层
回复 7# afan


    真是被搞混了~flag=4的时候,每一项都是一个数组,上面的例子里面[0]里面又有两个值。
假如我想把这个两个值分别赋给两个变量的话,又如何操作,试了一下下面的没有效果。
#include <Array.au3>
$sString = 'cab=cab cab=b'
$aRes = StringRegExp($sString, '([abc]+)=\1', 4)
Dim $test=$aRes[0]
_ArrayDisplay($test[0])
_ArrayDisplay($test[1])
发表于 2013-1-24 22:21:12 | 显示全部楼层
回复  afan


    真是被搞混了~flag=4的时候,每一项都是一个数组,上面的例子里面[0]里面又有两个值。 ...
haijie1223 发表于 2013-1-24 22:17



    _ArrayDisplay($test) 就可以了…
#include <Array.au3>
Local $Str = 'cab=cab cab=b'
Local $Test = StringRegExp($str, '([abc]+)=\1', 4)
If Not @Error Then
        MsgBox(0, '匹配数量: ' & UBound($Test), '其中每个元素均为单独的数组')
        For $i = 0 To UBound($Test) - 1
                _ArrayDisplay($Test[$i], '元素 - $Test[' & $i & ']')
        Next
EndIf
发表于 2013-1-24 22:43:10 | 显示全部楼层
回复 10# afan


    其中每个项都是数组。
[0]中的数组两项:
cab=cab
cab
[1]中数组两项:
b=b
b
能不能把[0]中包含的两项赋给两个变量,把[1]中两项赋给两个变量。
发表于 2013-1-24 22:45:32 | 显示全部楼层
回复 10# afan


    有点意思,居然au3还有指针数组的影子呢。
要直接访问这个包含数组的数组:Test里的一个元素,怎么办?
如数组‘Test[1]’里的第一个元素值:‘b=b’
发表于 2013-1-24 23:04:31 | 显示全部楼层
回复 11# haijie1223

可以直接赋值到一个变量的,那个变量就是一个新的数组,用索引引用即可
$aNewArr=$aRes[0]
发表于 2013-1-25 07:36:09 | 显示全部楼层
回复 12# happytc


    我也是问的这个问题~
发表于 2013-1-25 07:37:05 | 显示全部楼层
回复 13# annybaby


    我试过了,不好使,9#有代码,你试下。和12#有同样的疑问~
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-20 10:12 , Processed in 0.084420 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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