qq724174 发表于 2012-1-12 17:59:23

【已解决】正则取INI值,遇到目标值为空,返回的是下个[]里的值,求解

本帖最后由 qq724174 于 2012-1-12 20:08 编辑

$sFile_List 变量类容为:
pathfrmbin=ConfigMgr.dll
md5=2EACDD6F552278CADAE348A2EA669114
filedate=2012-01-06 15:58:17
forcedpath=


pathfrmbin=DNAService\P2PConfig.xml
md5=
filedate=2012-01-05 23:49:53
forcedpath=


pathfrmbin=DNAService\p2pserver.exe
md5=
filedate=2011-08-09 09:50:41
forcedpath=


pathfrmbin=DNAService\SoftUpdate.exe
md5=B20E7C54FBCED5F5EFD9ABF0C262896D
filedate=2012-01-06 18:34:53
forcedpath=Func _IniRead($sText, $section, $Key, $Default)
        ;(?<=^|[\r\n])(?:\)(?s).+?md5=([^\r\n]+).+
        ;\(?s).+?filedate=([^\r\n]+)
        Local $iKey = StringRegExp($sText, '\[' & $section & '\](?s).+?' & $Key & '=([^\r\n]+)', 3)
        If @error Then Return $Default
       
        Return $iKey
EndFunc   ;==>_IniRead_IniRead($sFile_List, p2pserver.exe', 'md5', '')这样读到的是里的md5,请帮我看看

user3000 发表于 2012-1-12 19:07:23

本帖最后由 user3000 于 2012-1-12 19:26 编辑

刚刚发的有误, 呵! 还是3楼A大的简洁.
主要 是 + 必须匹配至少一个字符, 而 * 号是能匹配可有可无的字符, 包括空字符!
Local $iKey = StringRegExp($sText, '\[' & $section & '\](?s).+?' & $Key & '=(.*?)[\r\n]*?filedate', 3)

afan 发表于 2012-1-12 19:19:01

这么工整的字段...
第4行最后一个“+”改为“*”

qq724174 发表于 2012-1-12 20:07:47

嗯 ,谢谢两位大哥指点。
页: [1]
查看完整版本: 【已解决】正则取INI值,遇到目标值为空,返回的是下个[]里的值,求解