将Perl变量转换为正则表达式

时间:2015-02-23 22:06:01

标签: regex perl hash

我有

my %id_to_name = (
    51803 => 'Jim bob and associates',
);

while (my ($key, $value) = each %id_to_name) {
    $regex = qr/^.*?$value.*?$/;
    $value = $regex;

我基本上希望将$value与:

相匹配
a bunch of random text blah blah 'Jim bob and associates' blah blah.

由于之前和之后的所有文字,我似乎无法得到匹配。

我正在尝试qr//,但它似乎不起作用。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

看起来您不需要正则表达式... index函数可以让您检查字符串是否包含子字符串。

print $value if index($input, $value) >= 0;

仅供参考,正则表达式的解决方案是:

print $value if $input =~ m/\Q$value\E/;

如果需要修饰符(例如i用于不区分大小写的匹配),则可以使用它。 \Q...\E就像quotemeta

答案 1 :(得分:0)

在Perl 5.18.2上,这可行:

my %id_to_name = (
    51803  =>  'Jim bob and associates',
            );

while (my ($key, $value) = each %id_to_name) {
    $regex = qr/^.*?$value.*?$/;
    print "$regex\n";
    $test="a bunch of random text blah blah 'Jim bob and associates' blah blah.";
    print "match" if $test =~/$value/;
}

打印:

(?^:^.*?Jim bob and associates.*?$)
match

正如评论中所述,领先和尾随.*?毫无意义。