0

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

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

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

但是你会怎么做呢?

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";
    }
}
4

3 回答 3

2
  1. 使用词法变量而不是全局变量。

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

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

    if ($input =~ /\Q$regex\E/) { ... }
    
  4. 在您使用 Perl 的过程中,不要忘记阅读Perl 常见问题解答。在您开始指定问题之前,它可能已经有了所有答案:如何匹配变量中的正则表达式?

于 2012-04-27T10:15:16.843 回答
1

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

if ($input =~ /$regex/) {
  print "match found\n";
}
于 2012-04-27T10:06:13.807 回答
0

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

chomp( $input );
chomp( $regex );
if($input =~ /$regex/){
    print "\nThe regex $regex matched the string $input\n\n";
}
于 2012-04-27T10:09:41.730 回答