正则表达式 - 仅匹配第一次出现

时间:2017-01-19 10:25:23

标签: regex perl

我试图找到一个正则表达式,它只匹配给定字符串中的第一个匹配项。现在它匹配每次出现。

给定的字符串是

  

> XP_676557.1假设蛋白[伯氏疟原虫株ANKA],部分[伯氏疟原虫ANKA]

我现在的正则表达式是

 \[(.+)\]

但匹配

  

伯氏疟原虫菌株ANKA

  

伯氏疟原虫ANKA

只需添加一个?正如下面的正则表达式没有帮助。

\[(.+?)\]

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:1)

你的正则表达没有错。您只需要删除perlcode中的global-flag。

请参阅https://regex101.com/r/wOIY2k/1https://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;