繁体   English   中英

在perl中解释正则表达式

[英]interpreting regular expression in 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 cript.pl&”。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM