Perl 匹配2个或更多选项

Perl 匹配2个或更多选项,perl,bioinformatics,qiime,Perl,Bioinformatics,Qiime,我有两种来自qiime分析的格式,一种来自silva数据库,另一种来自GreenGenes。这些文件之间的区别在于,silva文件对每个分类单元都有一个累进的D_数(王国=D_0_,门=D_1_,clase=D_2_等等),Greengens文件对每个分类单元都有一个字母(王国=K_,门=p_,clase=c_等等) 因此,我用Perl编写了两个脚本(一个用于Silva,一个用于GreenGenes),将每个分类单元提取到一个单独的文件中 我正试图在两种格式的匹配部分合并一段代码,我的意思是:

我有两种来自qiime分析的格式,一种来自silva数据库,另一种来自GreenGenes。这些文件之间的区别在于,silva文件对每个分类单元都有一个累进的D_数(王国=D_0_,门=D_1_,clase=D_2_等等),Greengens文件对每个分类单元都有一个字母(王国=K_,门=p_,clase=c_等等)

因此,我用Perl编写了两个脚本(一个用于Silva,一个用于GreenGenes),将每个分类单元提取到一个单独的文件中

我正试图在两种格式的匹配部分合并一段代码,我的意思是:

在第16行中,我想要两个选项,比如:

my @kingd=($taxon_value[0]=~m/D_0__(.*);D_1/g | m/k__(.*);p/g);
嗯,我知道这不管用

那么,如何在同一行中为match regex添加两个或多个选项

这是脚本的一部分(它有6个选项,我只写王国选项!!):

while(){
$line=$\;
chomp($line);
如果($line=~m/^#/g){
下一个
}
elsif($line=~m/^[Uu]nassigned/g){
下一个
}
elsif(行){
我的@full_行=$\uu;
foreach(@full_行){
my(@taxon_value)=拆分(/\t/,$);
foreach($taxon_值[0]){
如果($王国){
我的@kingd=($taxon_value[0]=~m/D_0_(.*);D_1/g);#只为席尔瓦
foreach(@kingd){
如果($\=~/^$/){
下一个
}
elsif($=~m/^[Uu]nknown/g){
下一个
}
elsif($=~m/^[Uu]n培养的$/g){
下一个
}
elsif($=~m/^[Uu]nidentified$/g){
下一个
}
否则{
推送@taxon\u列表,$\u;
}
}
}
}
}
}
谢谢

您需要在您的模式中执行or操作。您可以使用管道
|
执行此操作,该管道已经安装好了。但是它需要进入模式中。无需使用两个匹配运算符

my @kingd = $taxon_value[0] =~ m/D_0__(.*);D_1|k__(.*);p/g
现在它将匹配一个或另一个。有关更多信息,请参阅和。您还应该阅读此处的regex标记wiki中提供的信息,因为它包含指向许多有用工具的链接

您在代码中使用的是Perl的
|
运算符,它是一个。

您需要在您的模式中执行or。您可以使用管道
|
来执行此操作,您已经有了管道。但它需要进入模式。不需要有两个匹配运算符

my @kingd = $taxon_value[0] =~ m/D_0__(.*);D_1|k__(.*);p/g
现在它将匹配一个或另一个。有关更多信息,请参阅和。您还应该阅读此处的regex标记wiki中提供的信息,因为它包含指向许多有用工具的链接


您在代码中所做的不起作用的事情是使用Perl的
运算符,它是一个.

^[Uu]nknown
而不是使用
i
区分大小写,或者出于其他任何原因使用这个?
elsif($\Uu=~m/^(未知|未培养|未识别)$/ig{next;}
^[Uu]nknown
使用
i
来区分大小写或其他任何使用此的原因?
elsif($\u=~ m/^(未知|未培养|未识别)$/ig){next;}
非常感谢大家,事实是我没有理由为每一个人做每一件事,唯一的原因是我自己在学习perl,有时编程中的简单事情对我来说不是很清楚……我做了你们所有人都做过的改变recommend@abraham看看TagWik中提到的教程非常感谢,这是另一个问题,很抱歉问这么多,你们所有人建议的更改都有效,但现在我遇到了一个问题,它显示了一条消息:在Perl2.pl行的模式匹配(m//)中使用未初始化的值$。…当我使用@kingd=$taxon_value[0]=~m/D_0_(.*);D|1|k_(.*)时;p/g,但如果我使用它,就像m/D_u0_uuu(.*)一样;D_1/g我没有问题,现在我只是不使用警告模块,很抱歉问了很多人。感谢很多人总是使用警告,并修复它们。我现在没有电脑。我稍后会检查。非常感谢大家,事实上我没有理由为每一个做其他的,唯一的原因是我自己在学习perl,有些人没有对我来说,编程中最简单的事情不是很清楚……我做了你们所有人都做过的改变recommend@abraham请看一下tag wiki for Perl中提到的有关堆栈溢出的教程。非常感谢,这是另一个问题,很抱歉问了这么多,大家推荐的更改都很有效,但现在我有了显示消息的问题:在Perl2.pl行的模式匹配(m//)中使用未初始化值$。。当我使用@kingd=$taxon_值[0]=~m/D_0_(.*);D_1|k_(.*);p/g时,但如果我使用它,就像m/D_0_(.*));D_1/g我没有问题,现在我只是不使用警告模块,很抱歉向许多人询问。谢谢。请始终使用警告并修复它们。我现在没有计算机。我稍后会检查。
my @kingd = $taxon_value[0] =~ m/D_0__(.*);D_1|k__(.*);p/g