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

Re: Sed Verständnisproblem



Hallo Michael,
On Saturday 10 September 2005 11:21, Michael Bienia wrote:
> On 2005-09-09 23:00:40 +0200, Gebhard Dettmar wrote:
> > On Friday 09 September 2005 13:21, Michael Bienia wrote:
> > > Wenn jetzt Perl mit dabei ist, dann sollte man auch die
> > > Möglichkeiten der Perl Regex nutzen:
> > > echo "Bad Ne  u  branden burg" |perl -pe
> > > 's/(?<=[A-Za-z])\s+(?=[a-z])//g'
> >
> > Das sind aber extended Patterns. Die raff ich nicht (A zero-width
> > positive look-behind assertion., les ich grade. Ah ja ;-) Und wie
> > gehen deine beiden Ausdrücke zusammen?
> > Also: ?<=[A-Za-z])\s+ heißt, wenn ich das Beispiel aus der manpage
> > richtig übertrage: Ein oder mehr Leerzeichen, gefolgt von Groß- oder
> > Kleinbuchstabe.
>
> Fast. Falsche Richtung, es ist eine Look-behind-Zusicherung. Ich schaue
> links von einem oder mehr Leerzeichen, ob da ein Groß- oder
> Kleinbuchstabe ist, ohne diesen Buchstabe zum Treffer zu zählen.
>
> > Und wie lese ich s+(?=[a-z])
>
> Das ist eine Look-ahead-Zusicherung, ich schaue rechts vom einem oder
> mehr Leerzeichen ob da ein Kleinbuchstabe folgt, wiederum ohne es zum
> Treffer zu zählen.
>
> > Was meint "without including the tab in $&." in der Manpage (man
> > perlre)?
>
> In $& (aka $MATCH) wird der letzte Treffer vom Pattern-Matching
> gespeichert. Das bedeutet bei dem Beispiel aus der Manpage
> "/\w+(?=\t)/", dass in $& nur das Wort (\w+) gespeichert wird, aber im
> Suchtext ein Wort gefolgt von einem Tab enthalten sein muss.
>
> > Das einzige, was ich hier schnalle, ist, dass du nur Leerzeichen
> > zwischen Kleinbuchstaben ersetzt, um BadN... zu vermeiden.
>
> Das Pattern nochmal kurz erklärt:
> - suche nach einem oder mehr Leerzeichen: \s+
> - vor den Leerzeichen muss ein Groß- oder Kleinbuchstabe sein:
>   (?<=[A-Za-z])
> - nach den Leerzeichen muss ein Kleinbuchstabe sein
>   (?=[a-z])
>
> Perl durchsucht jetzt den Suchstring nach einem oder mehr Leerzeichen,
> für die die beiden Zusicherungen erfüllt sind. In $& haben wir dann nur
> die Leerzeichen \s+, die Buchstaben gehören nicht dazu.
>
> Da der nachfolgende Buchstabe beim Suchen noch nicht verbraucht wurde
> (wir haben ihn uns nur angesehen), kann Perl dort wieder ansetzen.
>
Genial, bin beeindruckt. Für die Erläuterung bin bestimmt nicht nur ich 
dir dankbar (dito für Frank) :-)
> Michael
Gebhard

-- 
Caution: breathing may be hazardous to your health.



Reply to: