[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: suche regexp



Hallo Roland M. Kruggel, hallo auch an alle anderen

Dienstag, 20. Juni 2006 15:58 - Roland M. Kruggel wrote:
> > > Gemeinsamkeiten der Decimalfelder:
> > > * nur zahlen
> > > * beliebige Vorkomma-Stellen
> > > * eine oder zwei Nachkommastellen
> > > * am ende immer ein '|'
> > > * immer ein Punkt als Dezimalzeichen
> >
> > vim:
> > :%s/\(\d\+\)\.\(\(\d\|\d\d\)|\)/\1,\2/g
>
> Megagei..... :)
> Ich frage jetzt nicht nach dem Wie. Hut ab, Michael.
> Danke.

Vorsicht! Nicht ungetestet übernehmen.

1. Viele RegExp-Dialekte interpretieren \( bzw \) als das jeweilige 
Klammerzeichen. Die Klammer zum Gruppieren darf dann nicht hinter einem 
Backslash stehen.

2. Zur Erklärung (muss man sich mal mit befassen, ist gar nicht soo 
schwer):

s bedeutet: Tausche das, was nach dem nächsten Delimiter (hier: "/") 
steht, gegen das, was nach dem 2. Delimiter steht. Das g hinter dem 3. 
Delimiter heißt, dass das ganze global erfolgen soll.

Im ersten Bereich steht eine Klammer zur Gruppierung und in der Klammer 
das \d für ein Digit (Ziffer 0..9) und das + danach für mind. 1 Mal. 
Danach folgt ein Punkt (mit einem vorangestellten Backslash, sonst 
steht er für ein beliebiges Zeichen). Danach folgt eine zweite 
Klammergruppierung, in der ein Digit oder (dargestellt durch "|") zwei 
Digits stehen können, gefolgt von dem "|" als dein Datenbankdelimiter.

Jede Zeichenfolge, auf die diese Beschreibung zutrifft (mind. 1 Ziffer, 
dann ein Punkt, dann 1 oder 2 Ziffern und das "|"), wird nun durch das 
Folgende ersetzt (steht nach dem zweiten /):

\1 schreibt alles, auf das die erste Klammergruppierung passte. Danach 
kommt das Komma und dann mit \2 alles, auf das die 2. 
Klammergruppierung zutraf.

Ich hoffe, du findest mit dieser kleinen Beschreibung Gefallen an der 
Mächtigkeit Regulärer Ausdrücke ;-)

Eine Alternative (aber auch ohne Gewähr, bitte vorher testen) findest du 
in meiner anderen Mail.

-- 
Gruß
                MaxX

Bitte beachten: Diese Mailadresse nimmt nur Listenmails entgegen.
Für PM bitte den Empfänger gegen den Namen in der Sig tauschen.



Reply to: