Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[OT] Reguläre Ausdrücke: Lösche nur Klammern mit /
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Diskussionsforum
View previous topic :: View next topic  
Author Message
Finswimmer
Moderator
Moderator


Joined: 02 Sep 2004
Posts: 5398
Location: Langen (Hessen), Germany

PostPosted: Wed Dec 07, 2011 10:26 am    Post subject: [OT] Reguläre Ausdrücke: Lösche nur Klammern mit / Reply with quote

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
View user's profile Send private message
firefly
Advocate
Advocate


Joined: 31 Oct 2002
Posts: 4115

PostPosted: Wed Dec 07, 2011 12:23 pm    Post subject: Reply with quote

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
View user's profile Send private message
Finswimmer
Moderator
Moderator


Joined: 02 Sep 2004
Posts: 5398
Location: Langen (Hessen), Germany

PostPosted: Wed Dec 07, 2011 2:08 pm    Post subject: Reply with quote

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
View user's profile Send private message
toralf
Advocate
Advocate


Joined: 01 Feb 2004
Posts: 2713
Location: Hamburg/Germany

PostPosted: Wed Dec 07, 2011 3:35 pm    Post subject: Reply with quote

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
View user's profile Send private message
mv
Advocate
Advocate


Joined: 20 Apr 2005
Posts: 4217

PostPosted: Wed Dec 07, 2011 5:23 pm    Post subject: Reply with quote

Es ist unklar, was bei geschachtelten Klammern passieren soll. Wenn dieses Problem nicht auftreten kann, sollte so etwas gehen (ungetestet):
Code:
s#([^)/]*/[^)]*)##
Back to top
View user's profile Send private message
Knieper
l33t
l33t


Joined: 10 Nov 2005
Posts: 846

PostPosted: Wed Dec 07, 2011 5:36 pm    Post subject: Reply with quote

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
View user's profile Send private message
Finswimmer
Moderator
Moderator


Joined: 02 Sep 2004
Posts: 5398
Location: Langen (Hessen), Germany

PostPosted: Wed Dec 07, 2011 7:09 pm    Post subject: Reply with quote

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
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) Diskussionsforum All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum