2013-08-28 99 views
0

是什么s#^.*/##s 的意义,因为我知道,在模式'.'表示它可以代表除了\n随机字母。正则表达式这是什么正规表达式S#的意思^ */##小号

然后'.*'应该表示随机数的随机字母数。

但在书中它表示,这将删除所有unix类型的路径。

我的问题是,这是否意味着我可以用空格替换随机数的随机数字?

+0

这里是关于正则表达式的一个[非常体面的教程](http://www.regular-expressions.info/tutorial.html) –

+4

关于这些都没有什么“随机的” –

回答

3

替换传统使用/字符作为分隔符(s/this/that/),但如果它是更方便,你可以使用其他标点符号。在这种情况下,使用#是因为正则表达式本身包含/字符;如果使用/作为分隔符,则该模式中的任何/将不得不转义为\/。 (#是不是我会选择的字符,但它是完全有效的。)

^字符串的开头(或线;见下文)匹配

.*/匹配的字符直至并包括任何序列/字符。由于*贪婪,它会匹配所有字符,最多包含最后/字符;任何precedng /字符由.*“吃掉”。 (最终/不是,因为如果.*匹配所有/字符最终/将不能匹配。)

拖尾s改性剂将字符串作为一个单一的线,即,使01​​匹配包括换行的任何字符。有关更多信息,请参见perldoc perlre中的ms修饰符。

所以这个:

s#^.*/##s 

取代一切从字符串的开头($_在这种情况下,因为这是默认值)高达不受任何最后/字符。

如果$_中没有/个字符,则匹配失败,并且替换不执行任何操作。

这可能用于替换绝对路径名或相对路径名的所有目录组件,例如将/home/username/dir/file.txt更改为file.txt

3

它将删除所有字符,包括因s修饰符引起的换行符,直到包含最后一个斜杠为止。

5
 
s  -> subsitution 
#  -> pattern delimiter 
^.* -> all chars 0 or more times from the begining 
/ -> literal/
##  -> replace by nothing (2 delimiters) 
s  -> single line mode (the dot can match newline) 
+0

“all从开始的字符0次或更多次“是一个可怕的解释。 – ikegami

0

请原谅一点儿。但我一直都在看这个,我认为重要的是要把它做好。

s#^.*/##s不是正则表达式。

^.*是一个正则表达式。

s///是替代运算符。

替换运算符有两个参数。第一个是正则表达式。第二个是替换字符串。

替换运算符(像Perl中许多其他类似引号的运算符)允许您更改使用的分隔符。

所以s###也是一个替代操作符(只是使用#而不是/)。

s#^.*/##意味着“发现正则表达式^.*/匹配的文本,并用一个空字符串替换它。而在年底s是改变了正则表达式的一个选项,以便.匹配‘\ n’,以及所有其他字符

相关问题