我试图找到一个正则表达式,它只匹配给定字符串中的第一个匹配项。现在它匹配每次出现。
给定的字符串是
> XP_676557.1假设蛋白[伯氏疟原虫株ANKA],部分[伯氏疟原虫ANKA]
我现在的正则表达式是
\[(.+)\]
但匹配
伯氏疟原虫菌株ANKA
和
伯氏疟原虫ANKA
只需添加一个?正如下面的正则表达式没有帮助。
\[(.+?)\]
有没有办法做到这一点?
答案 0 :(得分:1)
你的正则表达没有错。您只需要删除perlcode中的global-flag。
请参阅https://regex101.com/r/wOIY2k/1与https://regex101.com/r/wOIY2k/2
这是/\[(.+?)\]/
与/\[(.+?)\]/g
答案 1 :(得分:-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;