perl中的这个替换语句是什么意思=~s/()\s/$1/seg?
我知道perl中的这个替换语句是什么意思=~s/()\s/$1/seg?,perl,Perl,我知道=~s/()\s/$1/seg用空白代替了额外的分隔空间,但是$1和seg意味着什么呢?$1指的是第一个捕获组。它将是任何匹配的(.) seg是一组正则表达式标志: s将输入视为s单行。它告诉也要匹配\n(通常不匹配) e将替换模式视为Perlexpression。不确定它在这里到底有什么用,因为s/已经理解了$1 g意味着全局地进行此替换g 这是删除空白的一些尝试,尽管它有点不规则,我不确定这是否是故意的 s/(.) # match a single character, c
=~s/()\s/$1/seg
用空白代替了额外的分隔空间,但是$1
和seg
意味着什么呢?$1
指的是第一个捕获组。它将是任何匹配的(.)
seg
是一组正则表达式标志:
将输入视为s
单行。它告诉s
也要匹配
(通常不匹配)\n
将替换模式视为Perle
xpression。不确定它在这里到底有什么用,因为e
已经理解了s/
$1
意味着全局地进行此替换g
g
- 这是删除空白的一些尝试,尽管它有点不规则,我不确定这是否是故意的
s/(.) # match a single character, capture string into $1
\s # match a single whitespace
/ # replace with
$1 # the captured string from above
/seg # use these modifiers on the substitution
更改通配符的行为s
以同时匹配换行符
导致替换被评估为Perl代码。在本例中,它没有效果,因为它将简单地将字符串求值为字符串e
对于全局,意味着将尽可能多次执行匹配,而不是仅执行一次,这是默认情况g
foo-bar
转换为afoobar
。但是,如果有多个连续的空格,它将每隔一个空格删除一个空格,因为
将匹配一个空格。因此一个foo条
将变成afoo条
。为了解决这个问题,可以在\s
字符类中添加一个量词,并允许它多次匹配:\s+
但是,如果我们这样做,我们可能会跳过检查
,而执行s/\s+//g
。如果目的是仅删除非空白后面的空白,则更谨慎的做法是使用\S
(非空白)而不是
,例如:S/(\S)\S/$1/sg
正如我所说,这是一个有点奇怪的替换。@Mat关于修饰符的文档非常差。perlre中只提到了
s
。@MaryamSani,这是三个修饰符,s
,e
和g
。也是相关的,并包含对所有switches@TLP:s
和g
在那里<代码>e隐藏在perlop
中。可能是因为它代表“邪恶”。