是什么s#^.*/##s
的意义,因为我知道,在模式'.'
表示它可以代表除了\n
随机字母。正则表达式这是什么正规表达式S#的意思^ */##小号
然后'.*
'应该表示随机数的随机字母数。
但在书中它表示,这将删除所有unix类型的路径。
我的问题是,这是否意味着我可以用空格替换随机数的随机数字?
是什么s#^.*/##s
的意义,因为我知道,在模式'.'
表示它可以代表除了\n
随机字母。正则表达式这是什么正规表达式S#的意思^ */##小号
然后'.*
'应该表示随机数的随机字母数。
但在书中它表示,这将删除所有unix类型的路径。
我的问题是,这是否意味着我可以用空格替换随机数的随机数字?
替换传统使用/
字符作为分隔符(s/this/that/
),但如果它是更方便,你可以使用其他标点符号。在这种情况下,使用#
是因为正则表达式本身包含/
字符;如果使用/
作为分隔符,则该模式中的任何/
将不得不转义为\/
。 (#
是不是我会选择的字符,但它是完全有效的。)
^
字符串的开头(或线;见下文)匹配
.*/
匹配的字符直至并包括任何序列/
字符。由于*
是贪婪,它会匹配所有字符,最多包含最后/
字符;任何precedng /
字符由.*
“吃掉”。 (最终/
不是,因为如果.*
匹配所有/
字符最终/
将不能匹配。)
拖尾s
改性剂将字符串作为一个单一的线,即,使01匹配包括换行的任何字符。有关更多信息,请参见perldoc perlre
中的m
和s
修饰符。
所以这个:
s#^.*/##s
取代一切从字符串的开头($_
在这种情况下,因为这是默认值)高达不受任何最后/
字符。
如果$_
中没有/
个字符,则匹配失败,并且替换不执行任何操作。
这可能用于替换绝对路径名或相对路径名的所有目录组件,例如将/home/username/dir/file.txt
更改为file.txt
。
它将删除所有字符,包括因s
修饰符引起的换行符,直到包含最后一个斜杠为止。
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)
“all从开始的字符0次或更多次“是一个可怕的解释。 – ikegami
请原谅一点儿。但我一直都在看这个,我认为重要的是要把它做好。
s#^.*/##s
不是正则表达式。
^.*
是一个正则表达式。
s///
是替代运算符。
替换运算符有两个参数。第一个是正则表达式。第二个是替换字符串。
替换运算符(像Perl中许多其他类似引号的运算符)允许您更改使用的分隔符。
所以s###
也是一个替代操作符(只是使用#
而不是/
)。
s#^.*/##
意味着“发现正则表达式^.*/
匹配的文本,并用一个空字符串替换它。而在年底s
是改变了正则表达式的一个选项,以便.
匹配‘\ n’,以及所有其他字符
这里是关于正则表达式的一个[非常体面的教程](http://www.regular-expressions.info/tutorial.html) –
关于这些都没有什么“随机的” –