2011-04-27 46 views
0

任何人都可以解释我这个正则表达式吗?这$%做什么?我只是没有任何想法。这个Perl正则表达式有什么作用?

$self = "/usr/bin/XYZ"; 

$self =~s%/+[^/]*$%%; 

print ("$self\n"); 

谢谢。

+1

为什么你不把它放在一个小文件中并运行它?没有什么比自己尝试一些东西。你不仅可以学到更多东西,还可以玩弄它,找到更多有趣的东西。 – shawnhcorey 2011-04-27 13:14:40

回答

3

%被用作分隔符,以避免必须逃脱/字符
它可以改写

$self=~s/\/+[^\/]*$//; 

所以$是字符串锚的端部。表达式取代: -

\/+ - one or more forward slashes 
[^\/]* - any number of anything that is not a forward slash 
$  - at the end of the string 

什么也没有。
所以剥去像/end of string off

3

使用%代替更常见的分隔符,因为路径名通常包含很多/,否则您必须将其转义。 $匹配只是行的末尾。第二个%是在这种情况下为空的替代模式的结束。

至于正则表达式的含义 - 它意味着找到一个以/开始并以尾部/尾部结束的东西。基本上你会得到这样的XYZ,并将其替换为/ usr/bin中的任何内容。

+0

+1击败我2秒。这两个%%只是表示替换字符串是空的。 – 2011-04-27 08:17:06

+0

傻了,我没有注意到它是替代品。 :-) – 2011-04-27 08:20:43

1

百分号被用作s的分隔符而不是更常见的s/pattern/replacement /。所以紧接在它之前的美元符号是线尾的锚点。