找回密码
 加入
搜索
查看: 6287|回复: 14

[AU3基础] 求个正则,提取指定字符串,谢谢(已解决)

 火.. [复制链接]
发表于 2011-3-9 18:18:52 | 显示全部楼层 |阅读模式
本帖最后由 dearmb 于 2011-3-16 15:47 编辑

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="Orid.Management.SOHO.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <applicationSettings>
        <Orid.Management.SOHO.Properties.Settings>
            <setting name="DefaultFontFile" serializeAs="String">
                <value>o-rid Overline</value>
            </setting>
            <setting name="ColorIndex" serializeAs="String">
                <value>0</value>
            </setting>
            <setting name="ServerAddress" serializeAs="String">
                <value>192.168.163.92</value>
            </setting>
            <setting name="ServerName" serializeAs="String">
                <value>練習#4</value>
            </setting>
            <setting name="ViewVersion" serializeAs="String">
                <value> (Version 30.1)</value>
            </setting>
            <setting name="CompanyMasterContoinString" serializeAs="String">
                <value>192.168.163.21</value>
            </setting>
        </Orid.Management.SOHO.Properties.Settings>
    </applicationSettings>
</configuration>

提取红色的版本号,Version 30.1这句内容,十分感谢……
如果能把表达式再给个说明就更好啦,以后就可以自己改了,谢谢
发表于 2011-3-9 18:51:37 | 显示全部楼层
本帖最后由 lixiaolong 于 2011-3-9 18:54 编辑

StringRegExp
(?s)<.+"ViewVersion".+>.+\s\((.*?)(?=\)</value>)
发表于 2011-3-9 18:52:08 | 显示全部楼层
貌似只要提取小括号里的内容就可以了吧
$a=" <value> (Version 30.1)</value>"
$array = StringRegExp($a, '\((.*)\)', 3)

for $i = 0 to UBound($array) - 1
    msgbox(0, "正则表达式选项 3 测试 " & $i, $array[$i])
Next
 楼主| 发表于 2011-3-9 19:23:13 | 显示全部楼层
本帖最后由 dearmb 于 2011-3-9 19:24 编辑
StringRegExp
(?s).+\s\((.*?)(?=\))
lixiaolong 发表于 2011-3-9 18:51


呃……没看懂,能不能写全点?
$str=FileRead("D:\EntrySystems\Line8\SOHO.exe.config")

$str2=StringRegExp($str,'(?s)<.+"ViewVersion".+>.+\s\((.*?)(?=\)</value>)')

MsgBox(0,"",$str)
MsgBox(0,"",$str2)

是这样吗?
 楼主| 发表于 2011-3-9 19:23:53 | 显示全部楼层
貌似只要提取小括号里的内容就可以了吧
$a="  (Version 30.1)"
$array = StringRegExp($a, '\((.*)\)', 3 ...
xyold1 发表于 2011-3-9 18:52

不行吧,上面那个字符串有好多小括号的内容呢
发表于 2011-3-9 19:30:56 | 显示全部楼层
回复 4# dearmb
 $Str = _
                '<?xml version="1.0" encoding="utf-8" ?>' & @CRLF & _
                '<configuration>' & @CRLF & _
                '    <configSections>' & @CRLF & _
                '        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >' & @CRLF & _
                '            <section name="Orid.Management.SOHO.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />' & @CRLF & _
                '        </sectionGroup>' & @CRLF & _
                '    </configSections>' & @CRLF & _
                '    <applicationSettings>' & @CRLF & _
                '        <Orid.Management.SOHO.Properties.Settings>' & @CRLF & _
                '            <setting name="DefaultFontFile" serializeAs="String">' & @CRLF & _
                '                <value>o-rid Overline</value>' & @CRLF & _
                '            </setting>' & @CRLF & _
                '            <setting name="ColorIndex" serializeAs="String">' & @CRLF & _
                '                <value>0</value>' & @CRLF & _
                '            </setting>' & @CRLF & _
                '            <setting name="ServerAddress" serializeAs="String">' & @CRLF & _
                '                <value>192.168.163.92</value>' & @CRLF & _
                '            </setting>' & @CRLF & _
                '            <setting name="ServerName" serializeAs="String">' & @CRLF & _
                '                <value>練習#4</value>' & @CRLF & _
                '            </setting>' & @CRLF & _
                '            <setting name="ViewVersion" serializeAs="String">' & @CRLF & _
                '                <value> (Version 30.1)</value>' & @CRLF & _
                '            </setting>' & @CRLF & _
                '            <setting name="CompanyMasterContoinString" serializeAs="String">' & @CRLF & _
                '                <value>192.168.163.21</value>' & @CRLF & _
                '            </setting>' & @CRLF & _
                '        </Orid.Management.SOHO.Properties.Settings>' & @CRLF & _
                '    </applicationSettings>' & @CRLF & _
                '</configuration>' & @CRLF & @CRLF
$Test = StringRegExp($str, '(?s)<.+"ViewVersion".+>.+\s\((.*?)(?=\)</value>)', 3)
MsgBox(0,0,$Test[0])
 楼主| 发表于 2011-3-9 19:35:00 | 显示全部楼层
回复  dearmb
lixiaolong 发表于 2011-3-9 19:30



    爱死你了~~
发表于 2011-3-9 19:42:51 | 显示全部楼层
本帖最后由 lixiaolong 于 2011-3-9 19:53 编辑

回复 4# dearmb

StringRegExp ( "字符串", "表达式" [, 标志 ] [, 偏移量 ] ] )

StringRegExp($str, '(?s)<.+"ViewVersion".+>.+\s\((.*?)(?=\)</value>)', 3); 返回全局匹配的数组.

(?s) = 匹配任意字符,包括换行.
. = 匹配任何的单字符 (除换行以外).
+ = 重复一次或更多次.
.*? = 匹配任何的单字符 (除换行以外),重复零次或更多次,重复零次或一次.
(?=\)</value>) = 匹配 ")</value>" 前面的位置.

\s 不用也行.

评分

参与人数 1金钱 +10 收起 理由
xyold1 + 10

查看全部评分

发表于 2011-3-9 19:47:39 | 显示全部楼层
回复 7# dearmb

你嫁给我吧!
 楼主| 发表于 2011-3-9 19:54:10 | 显示全部楼层
回复  dearmb

你嫁给我吧!
lixiaolong 发表于 2011-3-9 19:47



    男人你都要?无耻啊……
发表于 2011-3-9 20:01:23 | 显示全部楼层
回复 10# dearmb

我是开玩笑的,呵呵
发表于 2011-3-9 21:42:35 | 显示全部楼层
路过,顶一个
发表于 2011-3-10 02:05:12 | 显示全部楼层
直接搜索,Version,然后取其后面的4个字符...我一般都是这么整的...
 楼主| 发表于 2011-3-10 17:32:17 | 显示全部楼层
直接搜索,Version,然后取其后面的4个字符...我一般都是这么整的...
www378660084 发表于 2011-3-10 02:05



    我原来是想那么弄,但此段字符串有N个Version ,没有办法
 楼主| 发表于 2011-3-10 17:32:18 | 显示全部楼层
直接搜索,Version,然后取其后面的4个字符...我一般都是这么整的...
www378660084 发表于 2011-3-10 02:05



    我原来是想那么弄,但此段字符串有N个Version ,没有办法
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-10-2 12:22 , Processed in 0.105089 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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