找回密码
 加入
搜索
查看: 4744|回复: 6

[AU3基础] 学习正则!处理minitow生成的磁盘分区列表!

  [复制链接]
发表于 2010-5-17 17:30:22 | 显示全部楼层 |阅读模式
本帖最后由 sunkiss 于 2010-5-18 08:38 编辑

这几天我在努力自学AU3,遇到的问题是多多啊!在你的帮助下,dsptw.exe分区的操作大体上明白了,可是正则这个东西没有理解,我就想试着自己学习!我用minitow.exe /nohp /ifs /p > diskinfo.txt生成了个分区的列表想用正则提取活动分区所在的dos盘符、windows下的盘符还有ghost对应的分区编号,失败了!因为这个不是制表符的!我想提取1:1那也行的1:1 d: c:合同2:1行的2:1、h失败了!还得请教!

N:N    DOS WIN PRI/LOG ACT HIDE ID FILE SYSTEM  LABEL       TOTALmb FREEmb
1:1  = D:  C:  PRIMARY YES NO   07 NTFS/HPFS                49010   29634  
1:2  = C:  F:  LOGICAL NO  NO   0B FAT32                    996     195   
1:3  = E:  D:  LOGICAL NO  NO   07 NTFS/HPFS                100006  8112   
1:4  = F:  E:  LOGICAL NO  NO   07 NTFS/HPFS                105230  31555  
1:5  = G:      PRIMARY NO  NO   83 Linux Native             48971   0      
1:6            PRIMARY NO  NO   82 Linux Swap               1027    0      
2:1  = H:      PRIMARY YES NO   83 Linux Native             52454   0      
2:2            PRIMARY NO  NO   82 Linux Swap               4096    0      
2:3  = I:  I:  PRIMARY NO  NO   07 NTFS/HPFS                102400  71377  
2:4  = J:  J:  PRIMARY NO  NO   07 NTFS/HPFS                317989  56649

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2010-5-17 18:59:56 | 显示全部楼层
#include <Array.au3>
$Str = FileRead('hdmini.txt')
$sR = StringRegExp($str, '\h*(\d:\d+)\h+\=\h([C-Z]:)\h+([C-Z]?:?)\h+PRIMARY YES', 3)
_ArrayDisplay($sR, '')
p.s, 改下标题先,这样不利于搜索
 楼主| 发表于 2010-5-18 08:52:01 | 显示全部楼层
本帖最后由 sunkiss 于 2010-5-18 09:06 编辑

这个正则真难理解!不过\h*(\d:\d+)我已经知道了!在我这里(\d:\d+)匹配的就是数字?:?这个磁盘编号!
这里面的\h是空格,后面的+是最大可能的匹配!我的理解在这里就是匹配个空格或者有多个空格都匹配,\=是匹配一个等于号吧!\h([C-Z]:)这里就是匹配一个空格接着匹配盘符,\h+([C-Z]?:?)这里因为上个匹配完后有个空格,所以要\h+,([C-Z]?:?)里面的?:?是最小匹配还是别的?不懂了。\h+PRIMARY YES这里\h+PRIMARY后面为什么不再\h+呢?最后这里改成\h+PRIMARY\h+YES也是可以的!!改成$sR = StringRegExp($str, '\h*(\d:\d+)\h+\=\h([C-Z]:)\h+([C-Z]?:?) PRIMARY YES', 3)也可以我都试过了!还要请老师教教我啊!
 楼主| 发表于 2010-5-18 09:00:18 | 显示全部楼层
本帖最后由 sunkiss 于 2010-5-18 09:08 编辑

将dos下边的d:改成两个空格之后第一行的1:1和C:就不显示了!试着改了改不行,或者不要DOS下边的盘符只要ACT下边是YES的那几行的N:N和WIN
发表于 2010-5-19 09:47:39 | 显示全部楼层
如果只是要行的话,应该很简单:
#include <Array.au3>
$Str = FileRead('hdmini.txt')
$sR = StringRegExp($str, '.+YES', 3)
_ArrayDisplay($sR, '')
发表于 2010-5-19 09:51:06 | 显示全部楼层
#include <Array.au3>
$Str = FileRead('hdmini.txt')
$sR = StringRegExp($str, '(\d:\d+).+YES', 3)
_ArrayDisplay($sR, '')
发表于 2010-5-19 12:12:00 | 显示全部楼层
那个
.+
也可修改成
.*
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-22 07:06 , Processed in 0.138171 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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