PL/SQL regexp_replace Problem

soa

Erfahrenes Mitglied
Hallo zusammen,

ich versuche gerade mit regulären Ausdrücken eine Zeichenersetzung durchzuführen, die mir nicht ganz gelingen mag:

PHP:
select  regexp_replace( value, ',' , '#|#' )
 from table
where 
id=1

Ich ersetze Kommas in einem String durch #|#. Jetzt möchte ich aber nur Kommata ersetzen, die nicht zwischen 2 Klammern stehen.

Bsp vorher: 8 (50/80 cm, halbrund),9 (2-tlg.Stand-WC-Set),2 (50/90 cm)

Bsp nachher : 8 (50/80 cm, halbrund)#|#9 (2-tlg.Stand-WC-Set)#|#2 (50/90 cm)

Mir ist es bisher nicht gelungen über reguläre Ausdrücke dieses Resultat zu erzeugen.
Hätte jemand einen Lösungsvorschlag,

danke,

Grüße
soa
 
Moin soa,

kommt darauf an, wieviele Ausnahmen es denn vom gezeigten Regelaufbau deinnes Textfeldes gibt.

Wenn alle Sätze so aussehen wie der eine gezeigte, dann kannst du doch ganz banal die zwei Zeichen ")," ersetzen.

Code:
select  regexp_replace( value, '),' , '#|#' )
 from table
where
id>=1

Grüße
Biber
 
Moin soa,

sorry, war natürlich ungetestet gestern.

Gemeint war folgende Variante mit "normalem" Replace() statt regexp_replace().
Code:
select value,
replace( value, '),' , ')#|#' ) from table
;

regexp_replace() ginge war auch, aber erstens wird keine Regexp verwendet dabei und zweitens müssten die KlammernAuf in dem Pattern maskiert werden (...regexp_replace( value, '\(,' , '\(#|#' ) ... ).
Ist ja überkandidelt in diesem Fall.

Grüße
Biber
 
Zuletzt bearbeitet:
Moin Biber,

danke für Deine Rückmeldung. Das habe ich mir natürlich auch schon gedacht. Also dann so:

<code>
select regexp_replace( value, '\),' , ')#|#' )
</code>

Diese Variante ist eben uncharmant, da nur genau diese Variante behandelt wird. ")," wird geändert ") ," nicht.
Ich suche eben nach einem regulären Ausdruck der sag:

"Ersetze alle Kommata durch "#|#" , excludiere alles in Klammern.

Viele Grüße
soa
 
Zurück