是什么意思,s#^.*/##s
因为我知道在模式中'.'
表示它可以表示除 . 之外的随机字母\n
。
那么'.*
'应该代表随机字母的随机数量个数。
但是在书中它说这将删除所有unix类型的路径。
我的问题是,这是否意味着我可以用空格替换随机字母的随机数量?
s -> 替代 # -> 模式分隔符 ^.* -> 所有字符从头开始 0 次或更多次 / -> 字面量 / ## -> 替换为空(2 个分隔符) s -> 单行模式(点可以匹配换行符)
替换通常使用/
字符作为分隔符 ( s/this/that/
),但如果更方便,您可以使用其他标点符号。在这种情况下,#
使用 是因为正则表达式本身包含一个/
字符;如果/
用作分隔符,/
则模式中的任何内容都必须转义为\/
. (#
不是我会选择的角色,但它完全有效。)
^
匹配字符串(或行;见下文)的开头
.*/
匹配直到并包括一个/
字符的任何字符序列。由于*
是greedy,它将匹配所有字符,包括最后一个 /
字符;任何前面/
的字符都被.*
. (final/
不是,因为如果.*
匹配所有/
字符,final/
将无法匹配。)
尾随s
修饰符将字符串视为单行,即.
匹配任何字符,包括换行符。有关更多信息,请参阅中的m
和s
修饰符。perldoc perlre
所以这:
s#^.*/##s
将字符串开头($_
在这种情况下,因为这是默认设置)到最后一个/
字符的所有内容都替换为空。
如果 中没有/
字符$_
,则匹配失败并且替换不执行任何操作。
这可用于替换绝对或相对路径名的所有目录组件,例如更改/home/username/dir/file.txt
为file.txt
.
它将删除字符串中的所有字符,包括由于修饰符而导致的换行符s
,直到包含最后一个斜杠。
请原谅有点迂腐。但我一直看到这一点,我认为把它做好很重要。
s#^.*/##s
不是正则表达式。
^.*
是一个正则表达式。
s///
是替换运算符。
替换运算符有两个参数。第一个是正则表达式。第二个是替换字符串。
替换运算符(与 Perl 中的许多其他类似引号的运算符一样)允许您更改使用的分隔符。
替换运算符也是如此s###
(仅使用#
而不是/
)。
s#^.*/##
表示“查找与正则表达式匹配的文本^.*/
并将其替换为空字符串。s
最后是一个更改正则表达式的选项,以便.
匹配“\n”以及所有其他字符。