View previous topic :: View next topic |
Author |
Message |
Finswimmer Bodhisattva
Joined: 02 Sep 2004 Posts: 5467 Location: Langen (Hessen), Germany
|
Posted: Wed Dec 07, 2011 10:26 am Post subject: [OT] Reguläre Ausdrücke: Lösche nur Klammern mit / |
|
|
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 _________________ Bitte auf Rechtschreibung, korrekte Formatierung und Höflichkeit achten!
Danke |
|
Back to top |
|
|
firefly Watchman
Joined: 31 Oct 2002 Posts: 5329
|
Posted: Wed Dec 07, 2011 12:23 pm Post subject: |
|
|
wird in den sed nicht der slash selbst als teil eines befehls angesehen?
Denn ich kenne sed ausdrücke in der form Code: | s/<such pattern>/<replace pattern>/<option> |
-> der slash müsst escaped werden _________________ Ein Ring, sie zu knechten, sie alle zu finden,
Ins Dunkel zu treiben und ewig zu binden
Im Lande Mordor, wo die Schatten drohn. |
|
Back to top |
|
|
Finswimmer Bodhisattva
Joined: 02 Sep 2004 Posts: 5467 Location: Langen (Hessen), Germany
|
Posted: Wed Dec 07, 2011 2:08 pm Post subject: |
|
|
firefly wrote: | wird in den sed nicht der slash selbst als teil eines befehls angesehen?
Denn ich kenne sed ausdrücke in der form Code: | s/<such pattern>/<replace pattern>/<option> |
-> der slash müsst escaped werden |
Bei sed darf man jedes Zeichen als "Trenner" nutzen.
Ich nutze meist #.
Escape ich den Slash hilft das leider auch nichts... _________________ Bitte auf Rechtschreibung, korrekte Formatierung und Höflichkeit achten!
Danke |
|
Back to top |
|
|
toralf Developer
Joined: 01 Feb 2004 Posts: 3942 Location: Hamburg
|
Posted: Wed Dec 07, 2011 3:35 pm Post subject: |
|
|
Hhm, also in Perl wird das schwer, weil das Pattern Matching "gierig" ist : Code: | tfoerste@n22 ~ $ echo "dies ist ein test (a eaea) (a eae/aea ea)" | perl -wne 'my @s = split (/(.*\/.*)/); print join ("-", @s), "\n"'
|
|
|
Back to top |
|
|
mv Watchman
Joined: 20 Apr 2005 Posts: 6780
|
Posted: Wed Dec 07, 2011 5:23 pm Post subject: |
|
|
Es ist unklar, was bei geschachtelten Klammern passieren soll. Wenn dieses Problem nicht auftreten kann, sollte so etwas gehen (ungetestet): |
|
Back to top |
|
|
Knieper l33t
Joined: 10 Nov 2005 Posts: 846
|
Posted: Wed Dec 07, 2011 5:36 pm Post subject: |
|
|
Wie mv andeutet, wäre die geschachtelte Klammerung nicht regulär, ansonsten:
Code: | >echo "dies ist ein test (a eaea) (a eae/aea ea)" | sed 's/([^()]*\/[^()]*)//'
dies ist ein test (a eaea) |
_________________ Je dümmer desto Gnome/KDE. |
|
Back to top |
|
|
Finswimmer Bodhisattva
Joined: 02 Sep 2004 Posts: 5467 Location: Langen (Hessen), Germany
|
Posted: Wed Dec 07, 2011 7:09 pm Post subject: |
|
|
Knieper wrote: | Wie mv andeutet, wäre die geschachtelte Klammerung nicht regulär, ansonsten:
Code: | >echo "dies ist ein test (a eaea) (a eae/aea ea)" | sed 's/([^()]*\/[^()]*)//'
dies ist ein test (a eaea) |
|
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! _________________ Bitte auf Rechtschreibung, korrekte Formatierung und Höflichkeit achten!
Danke |
|
Back to top |
|
|
|