首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Perl中限制或排除特殊字符或正则表达式?

如何在Perl中限制或排除特殊字符或正则表达式?
EN

Stack Overflow用户
提问于 2016-06-30 22:03:25
回答 2查看 100关注 0票数 0

我要求用户使用标准的键盘输入来输入搜索主题。

代码语言:javascript
运行
复制
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**",程序就会出错:

代码语言:javascript
运行
复制
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.
EN

回答 2

Stack Overflow用户

发布于 2016-06-30 22:09:57

如果不想使用正则表达式,可以使用index

代码语言:javascript
运行
复制
if (-1 != index $protein, $motif) {

或者,引用正则表达式:

代码语言:javascript
运行
复制
if ($protein =~ /\Q$motif/) {
票数 3
EN

Stack Overflow用户

发布于 2016-07-01 00:28:42

如果您正在尝试捕获损坏的正则表达式-您可以:

代码语言:javascript
运行
复制
#!/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转义元字符。

但是你也许可以在你的正则表达式中加入白名单元素,但我会对此保持警惕--一个部分工作/部分损坏的正则表达式引擎是很困难的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38125491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档