Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式中用于在哈希中查找表达式的Perl变量_Regex_Perl - Fatal编程技术网

Regex 正则表达式中用于在哈希中查找表达式的Perl变量

Regex 正则表达式中用于在哈希中查找表达式的Perl变量,regex,perl,Regex,Perl,我有一个包含很多元素的大杂凑 %my_hash = (); # filling of %my_hash automaticly $my_variable; # set the value of $my_variable within a loop 现在我想在%my\u hash中查找$my\u variable的值。我试过了 if(grep {/$my_variable/} keys %my_hash){ $my_new_variable = #here should be the e

我有一个包含很多元素的大杂凑

%my_hash = ();
# filling of %my_hash automaticly
$my_variable;
# set the value of $my_variable within a loop
现在我想在
%my\u hash
中查找
$my\u variable
的值。我试过了

if(grep {/$my_variable/} keys %my_hash){
    $my_new_variable = #here should be the element of %my_hash which makes the statement true
}
怎么做

编辑:问题不在于整个
$my\u变量
将在
%my\u哈希
中找到,例如

 $my_variable = astring
 $modules_by_path{"this_is_a_longer_astring"} = (something)

现在我想找到这个…

如果要匹配散列中的每个键,还必须在循环中迭代它们。我会这样做,但不知道这是否是最优雅的方式:

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

my %hash = (
    foo => 1,
    bar => 1,
    baz => 1,
);

my $variable = "bar";
my $new_variable;

for my $key (keys %hash){
    if ($key =~ /$variable/){
        $new_variable = $hash{$key};
    }
}
print $new_variable, "\n";

而且,总是试着用严格的方法写这样的东西;它将使您避免许多经典错误。

如果您想匹配哈希中的每个键,您还必须在循环中对它们进行迭代。我会这样做,但不知道这是否是最优雅的方式:

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

my %hash = (
    foo => 1,
    bar => 1,
    baz => 1,
);

my $variable = "bar";
my $new_variable;

for my $key (keys %hash){
    if ($key =~ /$variable/){
        $new_variable = $hash{$key};
    }
}
print $new_variable, "\n";

而且,总是试着用严格的方法写这样的东西;它将使您避免许多经典错误。

如果您想匹配哈希中的每个键,您还必须在循环中对它们进行迭代。我会这样做,但不知道这是否是最优雅的方式:

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

my %hash = (
    foo => 1,
    bar => 1,
    baz => 1,
);

my $variable = "bar";
my $new_variable;

for my $key (keys %hash){
    if ($key =~ /$variable/){
        $new_variable = $hash{$key};
    }
}
print $new_variable, "\n";

而且,总是试着用严格的方法写这样的东西;它将使您避免许多经典错误。

如果您想匹配哈希中的每个键,您还必须在循环中对它们进行迭代。我会这样做,但不知道这是否是最优雅的方式:

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

my %hash = (
    foo => 1,
    bar => 1,
    baz => 1,
);

my $variable = "bar";
my $new_variable;

for my $key (keys %hash){
    if ($key =~ /$variable/){
        $new_variable = $hash{$key};
    }
}
print $new_variable, "\n";

而且,总是试着用严格的方法写这样的东西;它将使您避免许多经典错误。

您可以使用
grep
,但您需要将其放在标量上下文中以获得所需的结果。如果
$my_variable
可能包含任何regex元字符,则还需要转义该变量的内容

这将使用
\Q
对非字母数字字符进行转义,并将所有匹配的哈希键保留在
@matching\u keys
中。如果比赛不止一场,你自己决定怎么办

my @matching_keys = grep /\Q$my_variable/, keys %my_hash;

我怀疑有更好的方法来做到这一点。这样搜索会破坏散列的全部功能,我认为更好的数据设计会有所帮助。但是,除非您描述您的数据和应用程序,否则我不能再多说了。

您可以使用
grep
,但您需要将其放在标量上下文中以获得所需的结果。如果
$my_variable
可能包含任何regex元字符,则还需要转义该变量的内容

这将使用
\Q
对非字母数字字符进行转义,并将所有匹配的哈希键保留在
@matching\u keys
中。如果比赛不止一场,你自己决定怎么办

my @matching_keys = grep /\Q$my_variable/, keys %my_hash;

我怀疑有更好的方法来做到这一点。这样搜索会破坏散列的全部功能,我认为更好的数据设计会有所帮助。但是,除非您描述您的数据和应用程序,否则我不能再多说了。

您可以使用
grep
,但您需要将其放在标量上下文中以获得所需的结果。如果
$my_variable
可能包含任何regex元字符,则还需要转义该变量的内容

这将使用
\Q
对非字母数字字符进行转义,并将所有匹配的哈希键保留在
@matching\u keys
中。如果比赛不止一场,你自己决定怎么办

my @matching_keys = grep /\Q$my_variable/, keys %my_hash;

我怀疑有更好的方法来做到这一点。这样搜索会破坏散列的全部功能,我认为更好的数据设计会有所帮助。但是,除非您描述您的数据和应用程序,否则我不能再多说了。

您可以使用
grep
,但您需要将其放在标量上下文中以获得所需的结果。如果
$my_variable
可能包含任何regex元字符,则还需要转义该变量的内容

这将使用
\Q
对非字母数字字符进行转义,并将所有匹配的哈希键保留在
@matching\u keys
中。如果比赛不止一场,你自己决定怎么办

my @matching_keys = grep /\Q$my_variable/, keys %my_hash;

我怀疑有更好的方法来做到这一点。这样搜索会破坏散列的全部功能,我认为更好的数据设计会有所帮助。但是,除非您描述您的数据和应用程序,否则我不能再多说了。

如果您仅从
%my\u hash
中查找一个特定的密钥

if (my ($my_new_variable) = grep /\Q$my_variable/, keys %my_hash) {

  ..
}


如果有更多的键与指定的正则表达式匹配。(如果
$my\u variable
不是要匹配的正则表达式,而是要匹配的文本字符串,请使用
\Q
前缀)。

如果您仅从
%my\u hash
中查找一个特定键

if (my ($my_new_variable) = grep /\Q$my_variable/, keys %my_hash) {

  ..
}


如果有更多的键与指定的正则表达式匹配。(如果
$my\u variable
不是要匹配的正则表达式,而是要匹配的文本字符串,请使用
\Q
前缀)。

如果您仅从
%my\u hash
中查找一个特定键

if (my ($my_new_variable) = grep /\Q$my_variable/, keys %my_hash) {

  ..
}


如果有更多的键与指定的正则表达式匹配。(如果
$my\u variable
不是要匹配的正则表达式,而是要匹配的文本字符串,请使用
\Q
前缀)。

如果您仅从
%my\u hash
中查找一个特定键

if (my ($my_new_variable) = grep /\Q$my_variable/, keys %my_hash) {

  ..
}


如果有更多的键与指定的正则表达式匹配。(如果
$my\u variable
不是要匹配的正则表达式,而是要匹配的文本字符串,请使用
\Q
前缀)。

能否给出散列中的数据示例?例如:
$modules\u by\u path{some\u file.c}=path/to/this/file
$my_variable=file
可以是例如,您可以给出散列中数据的示例吗?例如:
$modules\u by_path{some_file.c}例如:
$my\u variable=file
可以举例说明散列中的数据吗?例如:
$modules\u by\u path{some\u file.c}=path/to/this/file
$my\u variable=file
可以举例说明散列中的数据吗