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