无法检查字符串中的模式

时间:2012-07-06 17:39:22

标签: perl

我想要检查的是,“自由”是否出现在单词边界中,这是不起作用的(不打印):

use strict;

my @words= ("free hotmail msn");

my $free = "free";

$free =~ s/.*/\b$&\b/;


if ( $words[0] =~ m/$free/)
{
    print "found\n";
}

2 个答案:

答案 0 :(得分:2)

您需要做的就是写

my $free = 'free';

$free = qr/\b$free\b/;

print "found" if $words[0] =~ $free;

但是如果你的@words数组应该包含每个元素一个单词,那么你更可能想要

use strict;
use warnings;

my @words= qw( free hotmail msn );

my $free = "free";

print "found\n" if $words[0] eq $free;

答案 1 :(得分:1)

在模式替换中,如在双引号字符串中,\b被解释为退格符(大多数系统上为chr(8))。

$free =~ s/.*/\\b$&\\b/;

是编写其中一个

的尴尬方式
$free = '\b' . $free . '\b';
$free = "\\b$free\\b";

但它会完成这项工作。