我正在尝试对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 ...]。
答案 0 :(得分:2)
使用RegexBuddy(或r3mus said,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'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