0

我如何检查与变量而不是简单文本的匹配。我试过了:

my $_text = 'Please Help me here!';
my $_searchingText = 'me';
if ($_text =~ $_searchingText) {
    print 'yes!';
}
4

3 回答 3

2

两种选择:

  1. 插入$_searchingText正则表达式模式:

    print 'yes' if $_text =~ /$_searchingText/;
    
  2. 声明$_searchingText为模式:

    $_searchingText = qr/me/;
    print 'yes' if $_text =~ $_searchingText;
    
于 2012-06-14T12:12:53.483 回答
1

似乎 index 函数会做你想做的事情(这似乎是在$_searchingText内“索引” $_text)。

尝试这个:

#!/usr/bin/perl -w
use strict;

my $_text = 'Please Help me here!';
my $_searchingText = 'me';

if(index $_searchingText, $_text){
    print 'yes!';
}

或者您可以将要匹配的变量 ( $_searchingText) 放在正则表达式匹配运算符中:

#!/usr/bin/perl -w
use strict;

my $_text = 'Please Help me here!';
my $_searchingText = 'me';

if($_text =~ m/$_searchingText/){
    print 'yes!';
}

希望有帮助;让我知道我是否可以澄清

于 2012-06-14T12:20:10.113 回答
1

正如其他人指出的那样,您需要在正则表达式周围放置正则表达式标记:

if ($_text =~ /$_searchingText/) {

并不是

if ($_text =~ $_searchingText) {

Perl 也可以让标量 Perl 变量包含正则表达式,而不仅仅是字符串或数字:

my $_text = 'Please Help me here!';
my $_searchingText = qr/me/;
if ($_text =~ $_searchingText) {
    print 'yes!';
}

qr运算符使值包含在正$_searchingText则表达式中,因此您不需要if语句中的分隔符。它们是可选的。请参阅Regexp 类似引用的运算符

于 2012-06-14T18:59:41.393 回答