Perl使用带变量的匹配函数

时间:2012-06-14 11:36:18

标签: regex perl match

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

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

3 个答案:

答案 0 :(得分:2)

两个选项:

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

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

    $_searchingText = qr/me/;
    print 'yes' if $_text =~ $_searchingText;
    

答案 1 :(得分:1)

看起来索引函数可以完成你想做的事情(似乎是在$_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!';
}

希望有所帮助;如果我能澄清,请告诉我。

答案 2 :(得分: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 Quote-Like Operators