eaglelin 发表于 2015-1-15 14:30:18

报告一个String.au3的BUG!!!

在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

不信你就试试!!

netegg 发表于 2015-1-15 14:46:37

哪个版本的?

eaglelin 发表于 2015-1-15 14:57:32

哪个版本的?
netegg 发表于 2015-1-15 14:46 http://www.autoitx.com/images/common/back.gif


    都是这样的

afan 发表于 2015-1-15 15:02:43

StringRegExp 的标识是 3,可以匹配多组,你这样只返回第一个才是错误。

不过,这个函数一看就有问题,当然不是LZ提出的,而是未转义会有隐患。

eaglelin 发表于 2015-1-15 15:14:26

StringRegExp 的标识是 3,可以匹配多组,你这样只返回第一个才是错误。

不过,这个函数一看就有问题,当 ...
afan 发表于 2015-1-15 15:02 http://www.autoitx.com/images/common/back.gif


    是的StringRegExp应该返回一个数组

netegg 发表于 2015-1-15 15:22:32

本帖最后由 netegg 于 2015-1-15 15:26 编辑

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

我的为什么是这样的,我知道了,你用的是3.3.9.21+吗,不是的话,不支持三目运算,所以返回值不会是数组,是个定值

eaglelin 发表于 2015-1-15 15:26:30

我的为什么是这样的,我知道了,你用的是3.3.9.21+吗,不是的话,不支持三目运算
netegg 发表于 2015-1-15 15:22 http://www.autoitx.com/images/common/back.gif


    我的三个版本都是这样的 虽然代码有所不同 但是最后一句都是一样的

netegg 发表于 2015-1-15 15:32:12

Local $aReturn = StringRegExp这行出来的是数组,应该没问题

netegg 发表于 2015-1-15 15:33:25

$sEnd = $sEnd ? "(?=\Q" & $sEnd & "\E)" : "\z"

这行和上面那行出来的只是字符串

afan 发表于 2015-1-15 15:34:47

我的三个版本都是这样的 虽然代码有所不同 但是最后一句都是一样的
eaglelin 发表于 2015-1-15 15:26 http://www.autoitx.com/images/common/back.gif


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

不支持三目运算,所以返回值不会是数组,是个定值 ...
netegg 发表于 2015-1-15 15:22 http://www.autoitx.com/images/common/back.gif

不支持三目运算AutoIt会直接报错退出,还返回个毛线…

netegg 发表于 2015-1-15 15:35:11

Return $aReturn
只是返回第一个匹配项吧

netegg 发表于 2015-1-15 15:36:57

如果没有匹配项是没有$aReturn的

eaglelin 发表于 2015-1-15 15:41:46

本帖最后由 eaglelin 于 2015-1-15 15:42 编辑

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



不支持三目运 ...
afan 发表于 2015-1-15 15:34 http://www.autoitx.com/images/common/back.gif


    但是在实际应用里面
返回 Return $aReturn   结果正确

afan 发表于 2015-1-15 15:46:36

但是在实际应用里面
返回 Return $aReturn   结果正确
eaglelin 发表于 2015-1-15 15:41 http://www.autoitx.com/images/common/back.gif


    如果我需要所有匹配段呢?

netegg 发表于 2015-1-15 15:46:47

回复 10# afan
也对
页: [1] 2
查看完整版本: 报告一个String.au3的BUG!!!