用perl解释正则表达式



我正在尝试对Perl脚本进行逆向工程。其中一行包含一个匹配运算符,该运算符读取:

$line =~ /^s*^>/ 

输入只是带有标题信息的FASTA序列。我相信,脚本正在标头中寻找特定的模式。

以下是脚本应用于的文件示例:

>mm9_refGene_NM_001252200_0 range=chr1:39958075-39958131 5'pad=0 3'pad=0 strand=+ 
repeatMasking=none
ATGGCGAACGACTCTCCCGCGAAGAGCCTGGTGGACATTGACCTGTCGTC
CCTGCGG
>mm9_refGene_NM_001252200_1 range=chr1:39958354-39958419 5'pad=0 3'pad=0 strand=+ 
repeatMasking=none
GACCCTGCTGGGATTTTTGAGCTGGTGGAAGTGGTTGGAAATGGCACCTA
TGGACAAGTCTATAAG

这是一个匹配运算符,询问该行从一开始是否包含至少大于零的空格,但随后我失去了它的意义。

到目前为止,我就是这样解析正则表达式的:

从开始的[(/^…],包含至少大于零的空格[…\s…]。

使用RegexBuddy(或者,正如r3mus所说,regex101.com,它是免费的):

Assert position at the beginning of the string «^»
Match a single character that is a “whitespace character” (spaces, tabs, and line breaks) «s*»
   Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
Assert position at the beginning of the string «^»
Match the character “>” literally «>»

编辑:如果问题中的正则表达式实际上是错误的,那么Birei的答案可能更正确。

您必须去掉第二个^字符。它是一个元字符,意味着一行的开头(没有像/m这样的特殊标志),但这意味着它已经用第一个实现了。

字符>将在没有第二个^的行的开头匹配,因为初始空白是可选的(*量词)。因此,使用:

$line =~ /^s*>/ 

使用调试器对perl脚本进行反向工程要容易得多。"perl-d script.pl",或者如果您有Linux ddd:"ddd-script.pl&"。

对于多行正则表达式,此正则表达式匹配带有空格的emptyline和下一个FASTA的开头。http://www.rexfiddle.net/c6locQg

最新更新