我正在嘗試查找只匹配給定字符串中第一個匹配項的正則表達式。現在它匹配每一個事件。正則表達式 - 只匹配行中的第一個匹配項
給定的字符串是
> 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