我要求用户使用标准的键盘输入来输入搜索主题。
do {
print "Enter a motif to search for: ";
$motif = <STDIN>;
chomp $motif;
if ( $protein =~ /$motif/ ) {
print "I found it!\n\n";
} else {
print "I couldn\'t find it.\n\n";
}
} until ( $motif =~ /^\s*$/ );
问题是,如果用户输入一个正则表达式或特殊字符集,比如"TTG**",程序就会出错:
Enter a motif to search for: TTG**
Nested quantifiers in regex; marked by <-- HERE in m/DE** <-- HERE / at example_
5-3.txt line 35, <STDIN> line 9.
发布于 2016-06-30 22:09:57
如果不想使用正则表达式,可以使用index
if (-1 != index $protein, $motif) {
或者,引用正则表达式:
if ($protein =~ /\Q$motif/) {
发布于 2016-07-01 00:28:42
如果您正在尝试捕获损坏的正则表达式-您可以:
#!/usr/bin/env perl
use strict;
use warnings;
my $broken_re = '.**';
eval { qr/$broken_re/; };
print "Proceeding...\n";
print "Eval broke: $@\n" if $@;;
因此,您可以捕获任何不起作用的东西。
然而,限制正则表达式要困难得多。因为你。几乎必须对您的正则表达式执行正则表达式,这是一条通往疯狂之路。但是,如果您想转义所有特殊字符,则可以使用quotameta
,或者使用\Q
和\E
转义元字符。
但是你也许可以在你的正则表达式中加入白名单元素,但我会对此保持警惕--一个部分工作/部分损坏的正则表达式引擎是很困难的。
https://stackoverflow.com/questions/38125491
复制相似问题