4

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

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

我想用其中每个字符的一个空格替换它匹配的模式。例如,考虑到上面的例子,我想以这个文本结尾:

# http://              /

有没有一种简单的方法可以做到这一点?找出匹配的模式有多少个字符并将其替换为相同数量的不同字符?

谢谢你。

4

1 回答 1

6

一种简单的方法是:

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

正则表达式\b(http://)([^/]+)匹配单词边界、文字字符串http://和一个或多个非斜线字符,捕获http://in$1和非斜线字符$2。(请注意,为了避免倾斜牙签综合症,我使用!了上面的正则表达式分隔符而不是通常的分隔符。)/

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

于 2013-07-25T18:37:37.953 回答