← Back to team overview

sslug-teknik team mailing list archive

Re: Regex sp. -Igen igen :)

 

"Michael Schmidt" <m.schmidt@xxxxxxxx> writes:

> On Mon, 3 Jan 2005 17:57:34 +0100, Hans Schou <chlor@xxxxxxxx> wrote:
> 
> > On Mon, 3 Jan 2005, Peter Makholm wrote:
> >
> >> perl -pe 's/./\t/' testfil
> >
> > Nu ved jeg ikke om opgaven kun var at skifte det førstkommende punktum
> > ud
> Det var det helt specifikt.
> Og jeg kan nu (hvor det er blevet gjort for mig) se hvordan den simple
> ikke-grådige substitution var indlysende.
> Det er ikke aktuelt, men jeg kan alligevel ikke lade være med at
> fundere  over hvordan det så gøres hvis det var præsis n'te forekomst
> af et  specielt tegn...

Helt generelt (erstat <n-1> med værdien af n-1):
perl -pe 's/((.*?\.){<n-1>})(.*?)\./$1$3\t/'

(.*? kan evt. udskiftes med [^\.]*, det bliver muligvis endda en smule
hurtigere af det).
Men, indrømmet, det er ikke helt trivielt.

Oftest vil man kunne bruge noget mindre generelt, hvis man f.eks. ved at
n=3:
perl -pe 's/(.*?\..*?\..*?)\./$1\t/'

(Igen vil [^\.]* sikkert være hurtigere end .*? - men ikke lige så kort
og kryptisk).

.Henrik

-- 
Jacob: Because the theoreticians told me.
Prof. Vassilicos: Why do you believe theoreticians?


References