如何将用户输入用作正则表达式?

时间:2012-04-27 10:01:01

标签: regex perl input

我有一个简单的程序,用户可以在其中输入字符串。 在此之后,用户可以输入正则表达式。我需要将字符串与此正则表达式进行比较。

以下代码不起作用 - 正则表达式总是失败。

我知道这可能是因为我将字符串与字符串进行比较而不是使用正则表达式的字符串。

但是你会怎么做?

while(1){
    print "Enter a string: ";
    $input = <>;
    print "\nEnter a regex and see if it matches the string: ";
    $regex = <>;

    if($input =~ $regex){
        print "\nThe regex $regex matched the string $input\n\n";
    }
}

3 个答案:

答案 0 :(得分:2)

  1. 使用lexical variables代替全局的。

  2. 您应该记住,<>读取的字符串通常包含换行符,因此可能需要使用chomp删除换行符,如下所示:

    chomp(my $input = <STDIN>);
    chomp(my $regex = <STDIN>);
    
  3. 您可能希望从字面上解释从用户处获取的正则表达式特殊字符,以便^匹配文字抑扬符,而不是字符串的开头。如果是这样,请使用\Q转义序列:

    if ($input =~ /\Q$regex\E/) { ... }
    
  4. 不要忘记阅读Perl旅程中的Perl FAQ。在您开始指定问题之前,它可能会有所有答案:How do I match a regular expression that's in a variable?

答案 1 :(得分:1)

您需要使用//m//s/// - 但您可以指定变量作为模式。

if ($input =~ /$regex/) {
  print "match found\n";
}

答案 2 :(得分:0)

我认为你需要选择输入和正则表达式变量。并更正表达式以匹配正则表达式

chomp( $input );
chomp( $regex );
if($input =~ /$regex/){
    print "\nThe regex $regex matched the string $input\n\n";
}