找回密码
 加入
搜索
查看: 7227|回复: 20

[AU3基础] 报告一个String.au3的BUG!!!

 火.. [复制链接]
发表于 2015-1-15 14:30:18 | 显示全部楼层 |阅读模式
在String.au3里面的函数
Func _StringBetween($sString, $sStart, $sEnd, $fCase = False)
        ; Set correct case sensitivity
        If $fCase = Default Then
                $fCase = False
        EndIf
        Local $sCase = "(?is)"
        If $fCase Then
                $sCase = "(?s)"
        EndIf

        ; If you want data from beginning then replace blank start with beginning of string
        $sStart = $sStart ? "\Q" & $sStart & "\E" : "\A"

        ; If you want data from a start to an end then replace blank with end of string
        $sEnd = $sEnd ? "(?=\Q" & $sEnd & "\E)" : "\z"

        Local $aReturn = StringRegExp($sString, $sCase & $sStart & "(.*?)" & $sEnd, 3)
        If @error Then Return SetError(1, 0, 0)
        Return $aReturn
EndFunc   ;==>_StringBetween
里面的最后一句
Return $aReturn  

应该改成

Return $aReturn[0]

不信你就试试  !!
发表于 2015-1-15 14:46:37 | 显示全部楼层
哪个版本的?
 楼主| 发表于 2015-1-15 14:57:32 | 显示全部楼层
哪个版本的?
netegg 发表于 2015-1-15 14:46



    都是这样的
发表于 2015-1-15 15:02:43 | 显示全部楼层
StringRegExp 的标识是 3,可以匹配多组,你这样只返回第一个才是错误。

不过,这个函数一看就有问题,当然不是LZ提出的,而是未转义会有隐患。
 楼主| 发表于 2015-1-15 15:14:26 | 显示全部楼层
StringRegExp 的标识是 3,可以匹配多组,你这样只返回第一个才是错误。

不过,这个函数一看就有问题,当 ...
afan 发表于 2015-1-15 15:02



    是的  StringRegExp  应该返回一个数组
发表于 2015-1-15 15:22:32 | 显示全部楼层
本帖最后由 netegg 于 2015-1-15 15:26 编辑

[au3]Func _StringBetween($sString, $sStart, $sEnd, $fCase = Default)
        Local $sCase = "(?is)"
        If Not $fCase Then $sCase = "(?s)"

        ; If you want data from beginning then replace blank start with beginning of string
        $sStart = "\Q" & $sStart & "\E"
        If $sStart = "\Q\E" Then $sStart = "\A"

        ; If you want data from a start to an end then replace blank with end of string
        $sEnd = "\Q" & $sEnd & "\E"
        If $sEnd = "\Q\E" Then $sEnd = "\z"

        Local $aReturn = StringRegExp($sString, $sCase & $sStart & "(.*?)" & $sEnd, 3)
        If @error Then Return SetError(1, 0, 0)
        Return $aReturn
EndFunc   ;==>_StringBetween

[/au3]我的为什么是这样的,我知道了,你用的是3.3.9.21+吗,不是的话,不支持三目运算,所以返回值不会是数组,是个定值
 楼主| 发表于 2015-1-15 15:26:30 | 显示全部楼层
我的为什么是这样的,我知道了,你用的是3.3.9.21+吗,不是的话,不支持三目运算
netegg 发表于 2015-1-15 15:22



    我的三个版本都是这样的 虽然代码有所不同 但是最后一句都是一样的
发表于 2015-1-15 15:32:12 | 显示全部楼层
Local $aReturn = StringRegExp这行出来的是数组,应该没问题
发表于 2015-1-15 15:33:25 | 显示全部楼层
$sEnd = $sEnd ? "(?=\Q" & $sEnd & "\E)" : "\z"

这行和上面那行出来的只是字符串
发表于 2015-1-15 15:34:47 | 显示全部楼层
我的三个版本都是这样的 虽然代码有所不同 但是最后一句都是一样的
eaglelin 发表于 2015-1-15 15:26



    不是说了应该是返回数组吗,怎么还在纠结?你那样只返回一个元素是错误的。

不支持三目运算,所以返回值不会是数组,是个定值 ...
netegg 发表于 2015-1-15 15:22


不支持三目运算AutoIt会直接报错退出,还返回个毛线…
发表于 2015-1-15 15:35:11 | 显示全部楼层
Return $aReturn[0]
只是返回第一个匹配项吧
发表于 2015-1-15 15:36:57 | 显示全部楼层
如果没有匹配项是没有$aReturn[0]的
 楼主| 发表于 2015-1-15 15:41:46 | 显示全部楼层
本帖最后由 eaglelin 于 2015-1-15 15:42 编辑
不是说了应该是返回数组吗,怎么还在纠结?你那样只返回一个元素是错误的。



不支持三目运 ...
afan 发表于 2015-1-15 15:34



    但是在实际应用里面  
返回 Return $aReturn[0]   结果正确
发表于 2015-1-15 15:46:36 | 显示全部楼层
但是在实际应用里面  
返回 Return $aReturn[0]   结果正确
eaglelin 发表于 2015-1-15 15:41



    如果我需要所有匹配段呢?
发表于 2015-1-15 15:46:47 | 显示全部楼层
回复 10# afan
也对
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-13 15:02 , Processed in 0.077893 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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