# Regex-Problem mit replace außerhalb des matching bereichs liegender Zeichenketten



## babuschka (10. Okt 2011)

Ich habe ein Problem.

Bei einer Zeichenkette, z.b.
   Bla bla bla [Hallo] Bla X:12345 bla bla
soll der Wert innerhalb der eckigen Klammern (von mir aus auch inkl. der eckigen Klammer) erhalten bleiben.

Mittels replace funktioniert dies auch mit folgender Expression:
[^\[^\]](?=[^\]]*?(?:\[|$))

--> JavaScript RegExp Example: Online Regular Expression Tester

Zusätzlich, und das ist der Punkt an dem ich nicht mehr weiterkomme, soll auch noch das "X:" mit den 5 Zahlen übrig bleiben - also der Rest drum rum weggeschnitten werden.

Jemand eine Idee wie ich das miteinander verknüpfen kann? Ich habe gerade nen Knoten im Kopf.


----------



## Tomate_Salat (10. Okt 2011)

[c]^.*?\[(.*?)\].*?(X:\d+).*?$[/c]
wäre eine Möglichkeit. Setzt aber voraus, dass das X: immer hinter der eckigen Klammer steht. Als Replacement text hast du dann folgendes:
[c]$1 $2[/c]


----------



## babuschka (10. Okt 2011)

Tomate_Salat hat gesagt.:


> [c]^.*?\[(.*?)\].*?(X:\d+).*?$[/c]
> wäre eine Möglichkeit. Setzt aber voraus, dass das X: immer hinter der eckigen Klammer steht. Als Replacement text hast du dann folgendes:
> [c]$1 $2[/c]



Hi, Danke für den Input.
Das Problem ist u.a., dass ich am Server für die Regex die $1$2 Werte nicht angeben kann für die Ersetzung.

Ferner kann es sein, dass nur der Teil X:123 vorhanden ist UND/ODER der Teil in Eckigen Klammern.
In allen Fällen sollen dann die unnötigen Zeichen außerhalb der eckigen Klammer oder die nicht mit der Token-ID X:123 bleiben und der Rest wegfallen.


----------

