学习正则!处理minitow生成的磁盘分区列表!
本帖最后由 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 SYSTEMLABEL TOTALmb FREEmb
1:1= D:C:PRIMARY YES NO 07 NTFS/HPFS 49010 29634
1:2= C:F:LOGICAL NONO 0B FAT32 996 195
1:3= E:D:LOGICAL NONO 07 NTFS/HPFS 1000068112
1:4= F:E:LOGICAL NONO 07 NTFS/HPFS 10523031555
1:5= G: PRIMARY NONO 83 Linux Native 48971 0
1:6 PRIMARY NONO 82 Linux Swap 1027 0
2:1= H: PRIMARY YES NO 83 Linux Native 52454 0
2:2 PRIMARY NONO 82 Linux Swap 4096 0
2:3= I:I:PRIMARY NONO 07 NTFS/HPFS 10240071377
2:4= J:J:PRIMARY NONO 07 NTFS/HPFS 31798956649
#include <Array.au3>
$Str = FileRead('hdmini.txt')
$sR = StringRegExp($str, '\h*(\d:\d+)\h+\=\h(:)\h+(?:?)\h+PRIMARY YES', 3)
_ArrayDisplay($sR, '')p.s, 改下标题先,这样不利于搜索 本帖最后由 sunkiss 于 2010-5-18 09:06 编辑
这个正则真难理解!不过\h*(\d:\d+)我已经知道了!在我这里(\d:\d+)匹配的就是数字?:?这个磁盘编号!
这里面的\h是空格,后面的+是最大可能的匹配!我的理解在这里就是匹配个空格或者有多个空格都匹配,\=是匹配一个等于号吧!\h(:)这里就是匹配一个空格接着匹配盘符,\h+(?:?)这里因为上个匹配完后有个空格,所以要\h+,(?:?)里面的?:?是最小匹配还是别的?不懂了。\h+PRIMARY YES这里\h+PRIMARY后面为什么不再\h+呢?最后这里改成\h+PRIMARY\h+YES也是可以的!!改成$sR = StringRegExp($str, '\h*(\d:\d+)\h+\=\h(:)\h+(?:?) PRIMARY YES', 3)也可以我都试过了!还要请老师教教我啊! 本帖最后由 sunkiss 于 2010-5-18 09:08 编辑
将dos下边的d:改成两个空格之后第一行的1:1和C:就不显示了!试着改了改不行,或者不要DOS下边的盘符只要ACT下边是YES的那几行的N:N和WIN 如果只是要行的话,应该很简单:#include <Array.au3>
$Str = FileRead('hdmini.txt')
$sR = StringRegExp($str, '.+YES', 3)
_ArrayDisplay($sR, '') #include <Array.au3>
$Str = FileRead('hdmini.txt')
$sR = StringRegExp($str, '(\d:\d+).+YES', 3)
_ArrayDisplay($sR, '') 那个.+也可修改成.*
页:
[1]