找回密码
 加入
搜索
查看: 2131|回复: 12

StringRegExp 正则获取 FileRead 中的匹配问题

  [复制链接]
发表于 2009-12-26 22:22:20 | 显示全部楼层 |阅读模式
本帖最后由 afan 于 2009-12-26 23:45 编辑
$a = FileRead(RegRead('HKLM\SOFTWARE\AutoIt v3\AutoIt', 'InstallDir') & '\Examples\_ReadMe_.txt')
MsgBox(0, 0, $a)
$gjz = '- thesnow.'
If StringRegExp($a, $gjz & '$') Then MsgBox(0, '方法1', '结尾仅含有关键字:' & $gjz)
If StringRegExp($a, '- thesnow\.$') Then MsgBox(0, '方法2', '结尾仅含有关键字:' & $gjz)
;需要判断是否仅含有关键字$gjz,以上方式均无效
$b = StringRegExp($a, '(.+)$', 3)
If Not @error And $b[0] = $gjz Then MsgBox(0, '方法3', '结尾仅含有关键字:' & $gjz)
;而这样判断又是正确的
不知是不是 FileRead 的Bug?

;=================以下10#已解决
感谢顽固不化、pusofalse的帮助~!
发表于 2009-12-26 22:48:47 | 显示全部楼层
afan的提问只能给你顶起,
 楼主| 发表于 2009-12-26 22:49:21 | 显示全部楼层
回复 2# xlcwxl


    还是先测试吧,呵呵
发表于 2009-12-26 23:03:58 | 显示全部楼层
估计是表达式的问题。
把第四行改成:If StringRegExp($a, '(.+)$') Then MsgBox(0, '方法1', '结尾仅含有关键字:' & $gjz)
也能成功匹配。
 楼主| 发表于 2009-12-26 23:06:00 | 显示全部楼层
回复 4# 顽固不化


    我需要判断的是关键字$gjz,而不是任意字符,呵呵~
发表于 2009-12-26 23:12:35 | 显示全部楼层
回复  顽固不化


    我需要判断的是关键字$gjz,而不是任意字符,呵呵~
afan 发表于 2009-12-26 23:06



用'(.+)$'返回的只有唯一的一个匹配。
关于$的使用,AU3帮助里没提及,似乎指一行的结尾?照此应该有几个匹配结果的。
 楼主| 发表于 2009-12-26 23:14:53 | 显示全部楼层
回复 6# 顽固不化


    $就是整个字符串的结尾,所以只有一个匹配~

也就是说我这个例子就是想判断结尾是否为"- thesnow.",不包含其它字符(含回车)
发表于 2009-12-26 23:27:36 | 显示全部楼层
$匹配一行的行末位置,“行末”包含了回车符和换行符,"- thesnow\.$"之所以不能正确匹配,是因为这行只有"- thesnow.",而没有回车和换行。
 楼主| 发表于 2009-12-26 23:31:22 | 显示全部楼层
回复 8# pusofalse


    If StringRegExp($a, '- thesnow\.' & @CRLF & '$') Then MsgBox(0, '方法2', '结尾仅含有关键字:' & $gjz)

这样也不对?
发表于 2009-12-26 23:35:46 | 显示全部楼层
本帖最后由 顽固不化 于 2009-12-26 23:37 编辑

似乎明白了,帮助说:
FileRead ( "文件句柄/文件名" [, 数量] )
参数
文件句柄/文件名 目标文件句柄,可由此前调用 FileOpen 函数的返回值获得.另外也可以直接使用目标文件名.
数量 [可选参数] 指定要读取字符的数量.默认读取整个文件.不使用则文件使用RAW模式读取.
..........
如果文件使用 Raw 模式=4 打开, 数量必须设置为扇区大小(512)的倍数.
...........

RAW模式是什么我不知道,但似乎读出的不完全等同于字符串。
如果转换一下,就可以啦。
$a = String(FileRead(RegRead('HKLM\SOFTWARE\AutoIt v3\AutoIt', 'InstallDir') & '\Examples\_ReadMe_.txt'))
MsgBox(0, 0, $a)
$gjz = '- thesnow.'
If StringRegExp($a, $gjz&'$' ) Then MsgBox(0, '方法1', '结尾仅含有关键字:' & $gjz)
If StringRegExp($a, '(- thesnow\.)$') Then MsgBox(0, '方法2', '结尾仅含有关键字:' & $gjz)
;以上方式均无效
$b = StringRegExp($a, '(.+)$', 3)
If Not @error And $b[0] = $gjz Then MsgBox(0, '方法3', '结尾仅含有关键字:' & $gjz)
;而这样判断又是正确的

评分

参与人数 1金钱 +100 贡献 +20 收起 理由
afan + 100 + 20 谢谢帮忙

查看全部评分

 楼主| 发表于 2009-12-26 23:41:26 | 显示全部楼层
回复 10# 顽固不化


   
我检测到FileRead读取的字符串后面还附加了50个字符,但不知道是什么……
没想到原来还有这一茬,看来以后用FileRead还得留意一下~
非常感谢~!
发表于 2009-12-26 23:44:41 | 显示全部楼层
回复  顽固不化


   
我检测到FileRead读取的字符串后面还附加了50个字符,但不知道是什么……
没想 ...
afan 发表于 2009-12-26 23:41


也是从你的问题中才注意到这问题,呵呵,与你一起进步~
 楼主| 发表于 2009-12-26 23:59:13 | 显示全部楼层
回复 12# 顽固不化


    本来只想减少一行代码,没想到唤醒了之前的未知错误,呵呵~
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-6-26 11:34 , Processed in 0.101685 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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