谁能解释我这个正则表达式的含义

时间:2012-02-29 08:38:33

标签: regex perl

我想理解这个表达意思。

$req_msg =~ s/ \${$toReplace}/$replacements->{$toReplace}/g;

3 个答案:

答案 0 :(得分:4)

这项工作的先决条件是两个变量:

  • $toReplace - 包含任意值
  • $replacements - 包含,错误,替换的HASH参考

鉴于$toReplace包含“foo”,$req_msq的内容会搜索${foo}(带有前导单个空格),每次出现时都会被$replacements->{foo}替换

答案 1 :(得分:2)

  

$ req_msg = ~s / \ $ {$ toReplace} / $ replacementments-> {$ toReplace} / g;

用于替换。 $content=~ s/old_value/new_value/modifier;(修饰符可以是i,g,x,沿或组合)

前:

$content = "Hi I am a coder and I like coding very much!";
$content =~ s/i/eye/i;

现在$ content将包含“Heye eye am a coders and eye like very very much”

同样地,$ {$ toReplace}只是意味着标量引用是需要替换的旧值,$ replacements-> {$ toReplace}意味着$ replacementments是一个哈希引用,其键是$ toReplace。 $ hash_value = hash_ref-> {key};

很常见

当它找到标量引用返回的值时,将使用哈希引用的键替换为$ req_msg中找到的相应值

但我猜你问这个问题是因为你有空白的替代品。这可能是由于标量参考问题所致。

此代码段可能有助于消除您的疑虑。

#!/usr/bin/perl
use strict;
use warnings;

my $value = "Jassi";
my $scalar_ref = \$value;

print "scalar_ref = $scalar_ref \n and value = $value and ${$scalar_ref}\n";
my %hash = ("Jassi", "aliencoders");
my $hash_ref = \%hash;
my $reg_msg = "Hi this is Jassi";
print "reg_msg = $reg_msg \n";
$reg_msg =~ s/${$scalar_ref}/$hash_ref->{${$scalar_ref}}/;
print "reg_msg after s = $reg_msg\n";

查看最后一行!

答案 2 :(得分:0)

它将文本${blabla}的每次出现替换为使用密钥$replacements存储在哈希引用blabla中的任何内容,例如:

$replacements = { 'blabla' => 'blubb' };

${blabla}中的blubb替换每个$req_msg