使用perl替换单发中的字符串

时间:2016-11-16 08:07:48

标签: regex perl

我的意见:

my $tmp = "rrccllrrc";

预期产出:

$tmp = "right right center center left left right right center"; #End should not be spaced definitely.

我的代码:

$tmp=~s/c/center /g;
$tmp=~s/l/left /g;
$tmp=~s/r/right /g;

有人可以帮助缩短更换正则表达式的方法。

2 个答案:

答案 0 :(得分:7)

也可以没有正则表达式

my %repl = (c => 'center', l => 'left', r => 'right');

$tmp = join ' ', map { $repl{$_} }  split '', $tmp;

模式''的{​​{3}}将字符串分解为字符列表,split使用散列将其全部替换为全字。 map的输出列表由空格连接。

已更新为评论

如果原始字符串包含其他字符,可以先将其过滤掉

$tmp = join ' ', map { $repl{$_} } grep { /c|l|r/ } split '', $tmp;

或者,在map中使用空列表来查找散列中未定义的任何内容

$tmp = join ' ', map { $repl{$_} // () } split '', $tmp;

除了c|l|r之外,它完全删除了所有内容。将它们保留在结果中

$tmp = join ' ', map { $repl{$_} // $_ } split '', $tmp;

它们也被空格分开。为了让他们在一起需要进一步调整它。

答案 1 :(得分:6)

您可以在替换中使用替换哈希:

{{1}}