2017-01-19 4 views
-1

Я пытаюсь найти регулярное выражение, которое соответствует только первому вхождению в данной строке. Сейчас он соответствует каждому событию.Regex - соответствует только первому вхождению в строке

Данной строка

> XP_676557.1 гипотетический белок [плазмодий berghei штамм АНК], частичный [плазмодий berghei АНК]

и регулярное выражение я прямо сейчас

\[(.+)\] 

но это соответствует

Plasmodium berghei штамм АНК

и

Plasmodium berghei АНК

Просто добавив? к регулярному выражению, как показано ниже, не помогает.

\[(.+?)\] 

Есть ли способ сделать это?

+2

Ваше регулярное выражение хорошо. Согласование во всем мире зависит от того, как вы используете регулярное выражение и ваши флаги. Пожалуйста, напишите, как вы использовали его в своем коде. – sidyll

ответ

1

Его ничего плохого в вашем регулярном выражении. Вам просто нужно удалить глобальный флаг в perlcode.

См https://regex101.com/r/wOIY2k/1 против https://regex101.com/r/wOIY2k/2

То есть /\[(.+?)\]/ против /\[(.+?)\]/g

+1

Пожалуйста, не отправляйте ссылки на внешние ресурсы как ваш единственный ответ. Если ссылки будут устаревать в будущем, этот ответ бесполезен. Если вы добавите здесь код и разместите дополнительные ссылки, которые будут чем-то другим. – dgw

+0

@dgw Справа! Спасибо. В ответ добавлено регулярное выражение. – Twelleby

-1

в этом следующем коде, вы будете соответствовать только первое вхождение (как регулярное выражение работы):

my $s = '> XP_676557.1 hypothetical protein [Plasmodium berghei strain ANKA], partial [Plasmodium berghei ANKA]'; 
my ($f) = $s =~ m/\[(.+?)\]/; 
say $f; 
my ($m) = $s =~ m/\[([^\]]+)\]/; 
say $m; 
+0

Этот рабочий код отвечает на ваш вопрос. Возможно, вы должны уточнить свою цель и показать проблемный код. – BOC

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