2017-01-19 694 views
-1

我正在尝试查找只匹配给定字符串中第一个匹配项的正则表达式。现在它匹配每一个事件。正则表达式 - 只匹配行中的第一个匹配项

给定的字符串是

> XP_676557.1假定蛋白[伯氏疟原虫ANKA株],偏[伯氏疟原虫ANKA]

和正则表达式我现在是

\[(.+)\] 

但这匹配

疟原虫株安卡

疟原虫安卡

只要添加一个?到正则表达式如下没有帮助。

\[(.+?)\] 

有没有办法做到这一点?

+2

你的正则表达式是不错的。全局匹配取决于您如何使用正则表达式和标志。请发布您在代码中的使用方式。 – sidyll

回答

1

它的正则表达式没有错。你只需要删除你的代码中的全局标志。

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