假设我正在尝试将URL与正则表达式匹配:
$text = 'http://www.google.com/';
$text =~ /\bhttp:\/\/([^\/]+)/;
print $1; # It prints www.google.com
我想将其匹配的模式替换为其中每个字符的一个空格。例如,考虑到上面的例子,我想最终得到这个文本:
# http:// /
有一种简单的方法吗?找出匹配模式有多少个字符,并用相同数量的不同字符替换它?
谢谢。
答案 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
中的字母一样多。