ich für []Regex für irgendetwas zwischen []
Für zB die Regex finden müssen, wenn die Zeichenfolge - Hallo [Stapel] Hier ist meine [Tag] ist, die ich brauche, um [Suchen].
Es sollte zurückkehren Stapel, Tag, findet
ich für []Regex für irgendetwas zwischen []
Für zB die Regex finden müssen, wenn die Zeichenfolge - Hallo [Stapel] Hier ist meine [Tag] ist, die ich brauche, um [Suchen].
Es sollte zurückkehren Stapel, Tag, findet
Ganz einfach, man muss nur (1), um die Klammern mit einem Backslash entkommen, und (2) verwenden (.*?)
den Inhalt zu erfassen.
Die Klammern sind eine einfangende Gruppe, sie erfassen ihren Inhalt für die spätere Verwendung. Das Fragezeichen nach .*
macht die Übereinstimmung nicht gierig. Dies bedeutet, dass es der kürzesten Übereinstimmung entspricht und nicht der längsten. Der Unterschied zwischen gierig und nicht gierigen kommt auf, wenn Sie mehrere Übereinstimmungen in einer Zeile haben:
Hi [Stack], Here is my [Tag] which i need to [Find].
^______________________________________________^
Ein gieriges Spiel wird die längste Zeichenfolge möglich zwischen zwei Sätzen von eckigen Klammern finden. Das ist nicht richtig. Ein nicht-gierige Spiel finden die kürzeste:
Hi [Stack], Here is my [Tag] which i need to [Find].
^_____^
Anyways, wird der Code looking like am Ende:
string regex = @"\[(.*?)\]";
string text = "Hi [Stack], Here is my [Tag] which i need to [Find].";
foreach (Match match in Regex.Matches(text, regex))
{
Console.WriteLine("Found {0}", match.Groups[1].Value);
}
\[([\w]+?)\]
sollte funktionieren. Möglicherweise müssen Sie die übereinstimmende Gruppe ändern, wenn Sie auch spezielle Zeichen einfügen müssen.
Dies funktioniert ein bisschen schöner als die aktuell markierte Antwort, weil sie besser über Dinge wie diese verfügt: "Test [test] [test [test]" Die getaggte Antwort enthält die Streuner [im Spiel, während diese Regex nicht . – StronglyTyped
Je nach welcher Umgebung Sie nach:
\[([^\]]+)]
Ah, .NET ... Dies war ein Emacs Regex. :-) –
Ich glaube, du hast ein ']' sogar in Emacs Syntax verpasst. – kennytm
Ich habe mir die Freiheit genommen, es in ein .NET-kompatibles zu ändern. Beachten Sie, dass das ']' nur innerhalb des Zeichensatzes, nicht außerhalb davon entkommen muss (obwohl es nicht schadet, um es zu entkommen ...). –
.NET-Syntax von mehreren eingebetteten Klammern der Pflege:
\[ ((?: \\. | (?<OPEN> \[) | (?<-OPEN> \]) | [^\]])*? (?(OPEN)(?!))) \]
Dadurch wird die Anzahl der geöffneten [
Abschnitte in OPEN
zählt und nur Erfolgt, wenn OPEN
am Ende 0 ist.
Auf welcher Plattform? In welcher Programmiersprache? –
asp.net. Ich benutze Regex.IsMatch() – Ankit
Kann es verschachtelte Übereinstimmungen geben: 'foo [bar [baz]] done' wo du' bar [baz] 'greifen willst? Oder vielleicht 'foo [bar \\] baz] erledigt ', wo du' bar] baz greifen willst? Kann es neue Zeilen zwischen '[' und ']' geben? –