我正在尝试查找只匹配给定字符串中第一个匹配项的正则表达式。现在它匹配每一个事件。正则表达式 - 只匹配行中的第一个匹配项
给定的字符串是
> XP_676557.1假定蛋白[伯氏疟原虫ANKA株],偏[伯氏疟原虫ANKA]
和正则表达式我现在是
\[(.+)\]
但这匹配
疟原虫株安卡
和
疟原虫安卡
只要添加一个?到正则表达式如下没有帮助。
\[(.+?)\]
有没有办法做到这一点?
我正在尝试查找只匹配给定字符串中第一个匹配项的正则表达式。现在它匹配每一个事件。正则表达式 - 只匹配行中的第一个匹配项
给定的字符串是
> XP_676557.1假定蛋白[伯氏疟原虫ANKA株],偏[伯氏疟原虫ANKA]
和正则表达式我现在是
\[(.+)\]
但这匹配
疟原虫株安卡
和
疟原虫安卡
只要添加一个?到正则表达式如下没有帮助。
\[(.+?)\]
有没有办法做到这一点?
它的正则表达式没有错。你只需要删除你的代码中的全局标志。
见https://regex101.com/r/wOIY2k/1与https://regex101.com/r/wOIY2k/2
也就是说/\[(.+?)\]/
与/\[(.+?)\]/g
在这下面的代码,你将只匹配第一次出现(均为正则表达式的工作):
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;
此工作代码可以解答您的问题。也许你应该澄清你的目标,并显示有问题的代码。 – BOC
你的正则表达式是不错的。全局匹配取决于您如何使用正则表达式和标志。请发布您在代码中的使用方式。 – sidyll