[英]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";
}
}
您应该记住, <>
读取的字符串通常包含换行符,因此可能有必要使用chomp
删除换行符,如下所示:
chomp(my $input = <STDIN>); chomp(my $regex = <STDIN>);
您可能希望按字面解释从用户获取的正则表达式特殊字符,以使^
与文字的抑音符匹配,而不是与字符串的开头匹配。 如果是这样,请使用\\Q
转义序列:
if ($input =~ /\\Q$regex\\E/) { ... }
在您浏览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.