高手解析一下这个正则表达式

高手解析一下这个正则表达式

$ENV{"ATH"} =~ s/:[^:]*F:\db2v8\bin[^:]*:/:/;
$ENV{"ATH"} =~ s/:[^:]*F:\db2v8\adm[^:]*:/:/;
$ENV{"ATH"} =~        s/:[^:]*F:\db2v8\misc[^:]*:/:/;
$ENV{"ATH"} =~ s/\(.*\)/\1/;
$ENV{"ATH"} =~ s/^:\(.*\)/\1/;
$ENV{"ATH"} =~        s/::*/:/g;
$ENV{"ATH"} .= ":F:\\db2v8\\bin";
$ENV{"ATH"} .= ":F:\\db2v8\\a;

这几个语句真看不怎么懂?
$ENV{"PATH"} =~ s/:[^:]*F:\db2v8\bin[^:]*:/:/;
怎么一点人气都没有呢?高手帮忙解析一下这句啊!!


QUOTE:
原帖由 jamywong 于 2008-4-2 15:34 发表
$ENV{"PATH"} =~ s/:[^:]*F:\db2v8\bin[^:]*:/:/;
怎么一点人气都没有呢?高手帮忙解析一下这句啊!!

从path里删除F:\db2v8\bin。
具体来说:

查找冒号、不包含冒号的字符0-多个、F:\db2v8\bin、不包含冒号的字符0-多个、冒号,替换成冒号。

其中[^:]*既不包含冒号的字符0-多个。其中[]是字符集,^表示排除,[^:]既不包含冒号的任何字符。*表示0到多个。
谢谢你的回复,但是感觉这个字符串
PATH=F:\Perl\bin\;C:\WINNT\system32;C:\WINNT;C:\WINNT\System32\Wbem;F:\j2sdk1.4.
2\bin;F:\db2_v8\BIN;F:\db2_v8\FUNCTION;F:\db2_v8\SAMPLES\REPL

不能删除你说的F:\db2_v8\BIN.
不好意思,环境有所改变:
PATH=F:\Perl\bin\;C:\WINNT\system32;C:\WINNT;C:\WINNT\System32\Wbem;F:\j2sdk1.4.
2\bin;F:\db2v8\BIN;F:\db2_v8\FUNCTION;F:\db2v8\SAMPLES\REPL

你的对这句正则表达式的详细分析我也看明白了,但是按照你的分析这句正则表达式还是不能删除 F:\db2v8\BIN吧?
请问为什么不这样写?
$ENV{"PATH"} =~ s/F:\db2v8\bin/:/;
应该是\\而不是\吧


QUOTE:
原帖由 jamywong 于 2008-4-2 16:35 发表
不好意思,环境有所改变:
PATH=F:\Perl\bin\;C:\WINNT\system32;C:\WINNT;C:\WINNT\System32\Wbem;F:\j2sdk1.4.
2\bin;F:\db2v8\BIN;F:\db2_v8\FUNCTION;F:\db2v8\SAMPLES\REPL

你的对这句正则表达式的详细 ...

因为路径分隔符已经从冒号(:)改变为分号(;)了,所以要修改正则才能达到目的。