2013-12-12 4 views
2

Я пытаюсь перепроектировать скрипт 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 ...], по крайней мере, больше нуля [ . ... * ...}

+0

Что такое окончательный^для? – ES55

+0

^не появляется в заголовках после каких-либо пробелов. Таким образом, символ^должен изменить что-то в регулярном выражении. Я не понимаю, что он делает. Пробел, за которым следует a ^, означает что? – ES55

+2

@BoristheSpider - я считаю, что '^' будет соответствовать только литералу, если он экранирован ('\ ^'). – admdrew

ответ

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 «>» 

EDIT: Birei's answer, вероятно, более правильно, если регулярное выражение в вопросе на самом деле не так .

+0

вы решили использовать его с помощью веб-сайта RegexBuddy? – ES55

+0

Нет, это приложение Windows, которое я использую. Супер хорошо подходит для создания, тестирования и понимания регулярных выражений. – admdrew

+1

Но тогда есть http: //regex101.com ... И RegexBuddy не дешево – brandonscript

2

Вы должны избавиться от второго символа ^. Это метасимвол и означает начало строки (без специальных флагов, таких как /m), но это означает, что это уже достигнуто с первым.

Символ > будет совпадать в начале строки без второго ^, потому что исходные пробелы являются необязательными (* quantifier). Таким образом, использование:

$line =~ /^\s*>/ 
+0

Сценарий у меня есть работы, поэтому, если вы правы, возможно, второй^избыточен, или же первая часть регулярного выражения бесполезна? Теперь я вижу, что точка этого регулярного выражения заключается в том, чтобы находить строки, которые находятся с>. Итак, моя интерпретация исходного регулярного выражения заключается в том, чтобы найти строки, содержащие пробелы, а затем вернуться к началу строки (вторая ^) и попытаться совместить>. Верный? – ES55

+1

@ ES55: Насколько я понимаю, да, это правильно. Второй '^' является избыточным, но не первой частью. Я думаю, он пытается также сопоставить строку с пробелом перед первым символом '>', возможно, для опечаток, неверных или что-то в этом роде. – Birei

+0

Я этого не заметил. я думаю, что вы правы, он ищет опечатки и тому подобное! – ES55

2

Гораздо проще перестроить Perl-скрипт с помощью отладчика. «perl -d script.pl» или если у вас Linux ddd: «ddd cript.pl &».

Для многострочного регулярного выражения это регулярное выражение соответствует пустой строке с пробелами и началом следующего FASTA. http://www.rexfiddle.net/c6locQg

Смежные вопросы