2016-06-08 22 views
0

ich ein Regex Anfänger bin und ich kann nicht herausfinden, wie die folgenden entsprechen:Regex Klammern und Klammern nebeneinander

String Beispiel:

„Das ist mein string [etwas: etwas] und die Zeichenfolge ist sehr hübsch [etwas: etwas] [a] [b] [c]. "

Im Moment habe ich eine Regex, die alle eckigen Klammern Anfang und Ende entspricht. \[([^]]*)\].

Dies ergibt die folgende

  • [etwas: etwas]
  • [etwas: etwas]
  • [a]
  • [b]
  • [c]

Ich möchte eigenständige Klammern und Klammern gruppieren, die Klammern daneben haben.

Die Regex sollte es wie gruppieren;

  • [etwas: etwas]
  • [etwas: etwas] [a] [b] [c]

Wer in der Lage zu helfen?

+0

spezielle Regex Zeichen können backslashed werden, wenn Sie diese Zeichen finden möchten. '[ac] *' findet 'abc', aber' \ [ac \] 'findet' [ac] ' – LukStorms

+1

Für die Gruppierung können Sie [groups] (http://stackoverflow.com/questions/3512471/what-) verwenden. is-a-non-capturing-group): '(?: \ [[^ \]] * \]) +' –

+1

Wenn Sie den Inhalt zwischen den eckigen Klammern benötigen, verwenden Sie '(?: \ [([^ ]] *)]) + 'und greifen Sie auf die CaptureCollection zu. –

Antwort

2

können Sie tun:

((?:\[[^]]*\])+) 
  • Die nicht-erfassten Gruppe (?:\[[^]]*\]) Matches [, dann ein beliebige Anzahl von Zeichen bis zu ] und dann ]

  • Die erfassten Gruppe ((?:\[[^]]*\])+) Matches eines oder mehr Auftreten der nicht erfaßten Gruppe

Demo

+0

Schön. Ich habe darüber nachgedacht, Lookaheads so zu machen, dass sie nicht zu einem Schließen passen, wenn es eine Folge hatte [und solche Dinge. Dies ist eine viel einfachere Lösung als meine wäre gewesen. :) – Chris

Verwandte Themen