繁体   English   中英

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

[英]How to use an user input as a regex?

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

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

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

但是你会怎么做呢?

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";
    }
}
  1. 使用词法变量而不是全局变量

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

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

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

您需要使用//m//s/// ,但是您可以将变量指定为模式。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM