# [OT] Reguläre Ausdrücke: Lösche nur Klammern mit /

## Finswimmer

Hi,

ich habe folgenden String:

dies ist ein test (a eaea) (a eae/aea ea)

In diesem soll die zweite Klammer gelöscht werden.

Sie ist zu identifizieren/unterscheiden, dadurch dass sie ein "/" in der Klammer enthält.

Ich teste es im Moment in der Bash mit sed, da dies am schnellsten geht.

Später soll es dann aber evtl in LO oder direkt in MySQL genutzt werden, aber ich scheitere im Moment an dem regulären Ausdruck:

echo "dies ist ein test (a eaea) (a eae/aea ea)" | sed s'#([^/]*/[^/]*)##'g

Das soll eigentlich nach einer Klammer suchen, dann dürfen beliebig viele Zeichen kommen, die kein / sind. Anschließend muss ein / kommen und danach wieder "normale" Zeichen und eine Abschlussklammer.

Dummerweise löscht er mir beide Klammern.

Habt ihr eine Idee?

Danke

Tobi

----------

## firefly

wird in den sed nicht der slash selbst als teil eines befehls angesehen?

Denn ich kenne sed ausdrücke in der form

```
 s/<such pattern>/<replace pattern>/<option>
```

-> der slash müsst escaped werden

----------

## Finswimmer

 *firefly wrote:*   

> wird in den sed nicht der slash selbst als teil eines befehls angesehen?
> 
> Denn ich kenne sed ausdrücke in der form
> 
> ```
> ...

 

Bei sed darf man jedes Zeichen als "Trenner" nutzen.

Ich nutze meist #.

Escape ich den Slash hilft das leider auch nichts...

----------

## toralf

Hhm, also in Perl wird das schwer, weil das Pattern Matching "gierig" ist :

```
tfoerste@n22 ~ $ echo "dies ist ein test (a eaea) (a eae/aea ea)" | perl -wne 'my @s = split (/(.*\/.*)/); print join ("-", @s), "\n"'

```

----------

## mv

Es ist unklar, was bei geschachtelten Klammern passieren soll. Wenn dieses Problem nicht auftreten kann, sollte so etwas gehen (ungetestet): 

```
s#([^)/]*/[^)]*)##
```

----------

## Knieper

Wie mv andeutet, wäre die geschachtelte Klammerung nicht regulär, ansonsten:

```
>echo "dies ist ein test (a eaea) (a eae/aea ea)" | sed 's/([^()]*\/[^()]*)//'

dies ist ein test (a eaea)
```

----------

## Finswimmer

 *Knieper wrote:*   

> Wie mv andeutet, wäre die geschachtelte Klammerung nicht regulär, ansonsten:
> 
> ```
> >echo "dies ist ein test (a eaea) (a eae/aea ea)" | sed 's/([^()]*\/[^()]*)//'
> 
> ...

 

Super, das ist genau das, was ich brauche.

Geschachtelte Klammerungen gibt es nicht, da die zweite Klammer per Skript angehängt wurde und jetzt wieder weg muss.

Jetzt fällt mir auch auf, warum mein Ansatz nicht nicht geht:

Mein Ansatz greift auf die äußeren Klammern.

Mit Deinem Ansatz wird sich auf eine Klammerung mit / beschränkt.

Danke!

----------

