Chinaunix

标题: 高手解析一下这个正则表达式 [打印本页]

作者: jamywong    时间: 2008-04-02 09:33
标题: 高手解析一下这个正则表达式
$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;

这几个语句真看不怎么懂?
作者: jamywong    时间: 2008-04-02 15:34
$ENV{"PATH"} =~ s/:[^:]*F:\db2v8\bin[^:]*:/:/;
怎么一点人气都没有呢?高手帮忙解析一下这句啊!!
作者: formalin14    时间: 2008-04-02 16:07
原帖由 jamywong 于 2008-4-2 15:34 发表
$ENV{"PATH"} =~ s/:[^:]*F:\db2v8\bin[^:]*:/:/;
怎么一点人气都没有呢?高手帮忙解析一下这句啊!!


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

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

其中[^:]*既不包含冒号的字符0-多个。其中[]是字符集,^表示排除,[^:]既不包含冒号的任何字符。*表示0到多个。
作者: jamywong    时间: 2008-04-02 16:30
谢谢你的回复,但是感觉这个字符串
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.
作者: jamywong    时间: 2008-04-02 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

你的对这句正则表达式的详细分析我也看明白了,但是按照你的分析这句正则表达式还是不能删除 F:\db2v8\BIN吧?
作者: jamywong    时间: 2008-04-02 16:38
请问为什么不这样写?
$ENV{"PATH"} =~ s/F:\db2v8\bin/:/;
作者: churchmice    时间: 2008-04-02 17:37
应该是\\而不是\吧
作者: __lxmxn__    时间: 2008-04-03 10:54
原帖由 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

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

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




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2