2017-01-19 14 views
-1

Ich versuche, einen regulären Ausdruck zu finden, der nur das erste Vorkommen in der angegebenen Zeichenfolge entspricht. Jetzt passt es zu jedem Ereignis.Regex - nur erste Vorkommen in Zeile

Die angegebene Zeichenfolge ist

> XP_676557.1 hypothetisches Protein [Plasmodium berghei Stamm ANKA], teilweise [Plasmodium berghei ANKA]

und die Regex ich jetzt haben, ist

\[(.+)\] 

aber diese Spiele

Plasmodium berghei Stamm ANKA

und

Plasmodium berghei ANKA

Hinzufügen Just a? an die Regex wie folgt nicht weiterhilft.

\[(.+?)\] 

Gibt es eine Möglichkeit, dies zu tun?

+2

Ihre regex gut ist. Die globale Übereinstimmung hängt davon ab, wie Sie Ihre Regex und Ihre Flags verwenden. Bitte posten Sie, wie Sie es in Ihrem Code verwendet haben. – sidyll

Antwort

1

Es ist nichts falsch mit Ihrer Regex. Sie müssen nur die globale Flagge in Ihrem Perlcode entfernen.

Siehe https://regex101.com/r/wOIY2k/1 gegen https://regex101.com/r/wOIY2k/2

Das /\[(.+?)\]/ gegen /\[(.+?)\]/g

+1

Bitte poste keine Links zu externen Ressourcen als deine einzige Antwort. Wenn die Links in der Zukunft veralten, ist diese Antwort nutzlos. Wenn Sie den Code hier hinzufügen und zusätzliche Links posten, wäre das etwas anderes. – dgw

+0

@ dgw Richtig! Vielen Dank. Regex zur Antwort hinzugefügt. – Twelleby

-1

in diesem folgenden Code ist, wird nur das erste Vorkommen übereinstimmen (beide regexp Arbeit):

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

Dieser Arbeitscode beantwortet Ihre Frage. Vielleicht solltest du dein Ziel klarstellen und den problematischen Code zeigen. – BOC

Verwandte Themen