假设我正在尝试将URL与正则表达式匹配:
$text = 'http://www.google.com/';
$text =~ /\bhttp:\/\/([^\/]+)/;
print $1; # It prints www.google.com
Run Code Online (Sandbox Code Playgroud)
我想将其匹配的模式替换为其中每个字符的一个空格.例如,考虑到上面的例子,我想最后得到这个文本:
# http:// /
Run Code Online (Sandbox Code Playgroud)
有一个简单的方法吗?找出匹配模式有多少个字符,并用相同数量的不同字符替换它?
谢谢.
一个简单的方法是:
$text =~ s!\b(http://)([^/]+)!$1 . " " x length($2)!e;
Run Code Online (Sandbox Code Playgroud)
正则表达式\b(http://)([^/]+)一个单词边界,文字字符串匹配http://,和一个或多个非斜杠字符,捕捉http://在$1和非斜杠字符$2.(请注意,我使用!上面的正则表达式分隔符而不是通常/的避免倾斜牙签综合症.)
运算符e末尾的开关s///导致替换$1 . " " x length($2)被计算为Perl代码而不是被解释为字符串.因此,它评估$1后面跟着字母一样多的空格$2.