#!/usr/bin/perl -w
use strict;
my %difpep;
open DIF,"<","1689" or die "Fail to open 1689:$!";
open MAS,"<","mascot" or die "Fail to open mascot:$!";
open RES,">","result2" or die "Cannot open result:$!";
while(<MAS>){
chomp;
$difpep{$_}++;
}
while(<DIF>){
chomp;
my $mas=$_;
foreach my $dif (keys %difpep){
print RES "$dif\t$mas\n" if ($dif =~ m/$mas/);
}
}
close MAS;
close DIF;
close RES;
这个程序可以正常运行,但 如果将 if ($dif =~ m/$mas/)这句改为 if ($mas=~ m/$dif/)就不能正常运行了,好长时间也运行不完, 这是为什么呢?谢谢!
谢谢你!学习了!!
我目前也没找到运行时间长的原因,改完后可以运行,就是时间比不改之前长了好多。
重新再看你的问题... 我想我也不明白为甚麼你要
将 " if ($dif =~ m/$mas/)这句改为 if ($mas=~ m/$dif/)"
当你写成 if ($dif =~ m/$mas/)
那意味著, $dif 是长的, $mas 是短的
就像 if ( "123456" =~ /123/ ) { ... }
但返过来就成了 if ( "123" =~ /123456/ ) { ... }
那.. 应该甚麼都不能匹配出来啊 ?!
Perl的正则表达式的问题
\\2 代表模式里的第二个子表达式,在你这个例子里就是前面第二个括号所捕获的内容,也就是b,同理\\1是第一个括号所捕获的内容,也就是a 反向匹配就是指在模式的后半部分中引用在模式前半部分中定义的子表达式 记得给分啊
---请问这个perl的正则表达式~ s\/[\\n\\r]*\/\/g
AAA =~ s\/[\\n\\r]*\/\/g =~s\/A\/B\/g 在模式匹配是 替换,就是将内容A替换成内容B,后面的g是全局,就是全部替换成。[ AB ]出现在中括号的是任意的其中一个,\\n \\r是换行符 ,[\\n\\r]* *号是0个或以上 总起来:将$AAA中的所有的换行符全部替换为空,也就是将所有换行去掉。
谁能帮我注释一小段perl程序,尤其是if语句判断的是什么啊,while (<I...
2、while (<IN>) { 这一句, 相当于2句, 首先是 $_ = <IN>;默认读入的内容存在系统默认变量 $_中, 然后while循环 测试 $_的值是否非空,如果读入成功则进入循环;3、if (\/^>(\\S+)\/) { 这一句用于检查 $_ 的内容和正则表达式 \/^>(\\S+)\/ 是否匹配, ^表示文件头, 用()括起...
为什么说perl的正则表达式功能比Python强大
Python 的正则要靠模块来完成, Perl 的正则却已在 perl 解释器的心脏里, 谁会起动的更快就很明显了. 当然, 除了 C Python 还算最快之外, 其他如 JPython, Iron Python 这些要靠 framework 来起动的就必然更慢了 另外就是... 连击和助攻, perl 的正则很可以直接当成 expression (=~ 和 !~ )...
perl正则表达式 捕获
说实话,这个我也研究半天,虽然最终搞明白了,但这种肯定真正编程时是肯定不提倡使用的,正则非常巧妙,几个符号缺一不可。首先搞懂顺序问题:从perlre文档里面关于capture buffers的描述可以看出:Capture buffers are numbered from left to right,编号是从左到右的。也就是说,对于你这个表达式,最外面...
Perl兼容正则表达式函数-PHP8知识详解
PHP8中的正则表达式功能主要分为Perl兼容和posix扩展两种,但推荐使用Perl兼容的。该兼容性提供了更全面的正则功能。首要任务是利用正则表达式进行字符串匹配,比如通过preg_match()函数。例如,下面的代码演示了如何检查一个日期格式(YYYY-MM-DD)是否存在于字符串中:使用 preg_match('YYYY-MM-DD', $...
perl 正则表达式\/^\\s*(.*?)\\s*\\=\\s*\\"(.*)\\"\/是什么意思?
代码没有问题。将db.ini文件的内容逐行读出来,并进行正则匹配,将所有符合下面匹配规则的行的等号左边有效字符串(可能会为空)作为变量的名字,并将等号右边的有效字符串作为变量的值 匹配规则是,字符串必须是以至少一个空格开头,然后有或者没有除了换行符以外的任意字符串,然后再接至少一个空格,...
如何提高perl处理大文件的效率
1)处理文本文件,一般是逐行读入,在这样的循环里,绝不要使用外部shell命令,例如,假如要将分析内容写往其他文件,那么该老老实实的使用perl 自己的写文件句柄的方式,而不要使用shell的"echo $_ >;file"之类的命令,后者比前者慢10000倍。2)在匹配正则表达式时,如果匹配里含有"&"字符,那么记得...
...在python调用函数时 我想知道怎么用正则表达式匹陪
可以用正则表达式先匹配出,带引号的变量 使用split(',')分开,在结果的列表中,找到不带引号的变量。合并后,就是完整的变量表了。a = r'"a,b","ab",line' #原始变量字符串 arg = re.findall(r'\\".+?\\"',a) #找出带引号的变量 lst = a.split(',') #原始变量字符串,使用逗号...
求教perl代码 foreach my $line (split(\/[\\n\\r]+\/, $sid->before...
} 这是一个枚举语句,split(\/正则\/,文本)的结果是一个数组,表示把文本按照正则表达式划分,\\r\\n表示回车换行,后面的$sid->before()函数结果应该是一段包含多行的文本,split完成的功能就是把文本按行拆分。然后$line变量依次为每一行,执行循环语句,foreach的语法格式是:foreach 变量 (数组) {...