2010-12-15 9 views
0

Ich versuche, eine Zeichenfolge mit regulären Ausdrücken (.NET) zu analysieren und alle benutzerdefinierten Token beginnend mit [[ und endend mit ]] zu finden. Mein erster Versuch war, \[\[(.*)\]\] zu verwenden. Dies schien zu funktionieren, wenn nur ein Token in einer Zeichenfolge vorhanden war. Aber wenn es mehrere gibt, gibt es nur ein Ergebnis von der ersten [[ bis zur letzten ]] zurück.Regulärer Ausdruck zum Ausschließen der Teilzeichenfolge

Mein Gedanke ist, ]] von übereinstimmenden Zeichen auszuschließen, aber ich habe noch einen Weg finden, um das funktioniert zu bekommen. Ich habe versucht, mit Ausschluss-Sets (?! \]\]) und spielte mit unterschiedlicher Syntax, aber kann nichts finden, was tatsächlich funktioniert.

Wer weiß, eine einfache Möglichkeit, dies zu tun?

Antwort

2

Reguläre Ausdrücke sind standardmäßig gierig, d. H. Sie verbrauchen so viele Zeichen wie möglich. Um dies zu vermeiden, setzen Sie ein "?" nach dem ". *", d. h. versuchen Sie \[\[(.*?)\]\].

+0

Perfekt. Genau das, was ich brauchte. Ich habe das gierige Konzept der Regex vergessen, da ich es nicht zu oft benutze. – jwynveen

+0

Natürlich müssen Sie diesen öffnenden eckigen Klammern entkommen. Das OP hat es getan, aber sie sind nicht aufgetaucht, bis ich die Code-Formatierung hinzugefügt habe. –

+0

@Alan Moore: Danke, ich habe versucht, mit dem OP zu gehen. Ich habe diese Antwort gerade editiert. – sjngm

0

Es ist noch einfacher als das, versuchen Sie .*? (die letzte? Bedeutet, es ist ein ungerechtes Spiel, was bedeutet, dass es das Nötigste beim Erfassen der Informationen greifen wird).

Als Referenz finden Sie unter this site on regex. Es wird Ihnen mehr Details über Greedy vs. Ungreedy geben.

+0

'. *?' Wird immer nichts ergeben. Ich denke, es wird nicht viel einfacher als das. : P –

+0

Heh, war mehr ein Segment der ursprünglichen Regex, aber Punkt notiert. ;-) –

0

. * Ist ein "gieriges" Spiel und geht zum letzten Spiel Ihrer Brackets.

*? gibt die erste Übereinstimmung an, die so wenig Wiederholungen wie möglich verbraucht (entspricht Lazy *)

Verwandte Themen