在Perl中用每个字符一个空格替换模式

时间:2013-07-25 18:34:32

标签: regex perl

假设我正在尝试将URL与正则表达式匹配:

$text = 'http://www.google.com/';
$text =~ /\bhttp:\/\/([^\/]+)/;
print $1;  # It prints www.google.com

我想将其匹配的模式替换为其中每个字符的一个空格。例如,考虑到上面的例子,我想最终得到这个文本:

# http://              /

有一种简单的方法吗?找出匹配模式有多少个字符,并用相同数量的不同字符替换它?

谢谢。

1 个答案:

答案 0 :(得分:6)

一种简单的方法是:

$text =~ s!\b(http://)([^/]+)!$1 . " " x length($2)!e;

正则表达式\b(http://)([^/]+)匹配单词边界,文字字符串http://以及一个或多个非斜杠字符,捕获http://中的$1和非斜杠$2中的字符。 (请注意,我使用!作为上面的正则表达式分隔符而不是通常的/来避免leaning toothpick syndrome。)

e运算符末尾的s///开关会将替换$1 . " " x length($2)计算为Perl代码,而不是被解释为字符串。因此,它评估为$1,后面跟$2中的字母一样多。