#!/usr/bin/perl
use strict;
use warnings;
my $s = "sad day
Good day
May be Bad Day
";
$s =~ s/\w+ \w+/_/gm;
print $s;
我正在尝试用 _ 替换单词之间的所有空格,但它不起作用。那有什么问题?
#!/usr/bin/perl
use strict;
use warnings;
my $s = "sad day
Good day
May be Bad Day
";
$s =~ s/\w+ \w+/_/gm;
print $s;
我正在尝试用 _ 替换单词之间的所有空格,但它不起作用。那有什么问题?
替换用\w+
下划线替换整个单词 (),然后是空格,然后是另一个单词。
真的没有必要替换(或捕捉重要的东西)这些词
$a=~s/\b +\b/_/gm;
将用\b
下划线替换一个分词符( ,一个词和一个非词之间的零宽度转换),后跟一个或多个空格,然后是另一个分词符。使用\b
确保您不会在新行之后或之前替换空格。
这种模式替换可能是最有效的解决方案:
$a =~ s/\b \b/_/g;
如果没有涉及明确的前瞻和后瞻断言的答案,这个问题就不会完整:
$s =~ s/(?<=\w) (?=\w+)/_/g
这实际上与涉及零宽度字边界锚的解决方案相同\b
。
请注意,前瞻正则表达式可以匹配任何字符长度的正则表达式,但后瞻正则表达式必须是固定长度的(这就是为什么(?<=\w+)
不能这样做)。