2017-01-19 94 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

相關問題