解释perl中的正则表达式

时间:2013-12-12 22:52:06

标签: regex string perl string-matching

我正在尝试对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 ...]。

3 个答案:

答案 0 :(得分:2)

使用RegexBuddy(或r3mus saidregex101.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's answer可能更正确,如果有问题的正则表达式确实是错误的。

答案 1 :(得分:2)

你必须摆脱第二个^字符。它是一个元字符,意味着一行的开头(没有/m之类的特殊标志),但这意味着它已经通过第一个实现了。

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

$line =~ /^\s*>/ 

答案 2 :(得分:2)

使用调试器对perl脚本进行逆向工程要容易得多。 “perl -d script.pl”或者如果你有Linux ddd:“ddd cript.pl&”。

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