infostabil > edb.programmering.* > edb.programmering.general

Kurt Hansen (09.06.2011, 17:14)
Jeg skal i en ræveruf have rettet nogle stier i et svimlende antal
HTML-dokumenter. Jeg bruger Notepad++, som kan anvende regulære udtryk
til søg/erstat.

De strenge der skal rettes har formen "/records/586-87-r.html".
Kunsten er nu at få skrevet det samme tal foran 87, som der er foran
86 - altså i dette tilfælde et 5-tal.

5-tallet kan være alt imellem 1 og 9.

Nogen her der er skarppe til regular expressions?
Andreas Andersen (09.06.2011, 19:08)
Den 09-06-2011 17:14, Kurt Hansen skrev:
> Jeg skal i en ræveruf have rettet nogle stier i et svimlende antal
> HTML-dokumenter. Jeg bruger Notepad++, som kan anvende regulære udtryk
> til søg/erstat.
> De strenge der skal rettes har formen "/records/586-87-r.html".
> Kunsten er nu at få skrevet det samme tal foran 87, som der er foran
> 86 - altså i dette tilfælde et 5-tal.
> 5-tallet kan være alt imellem 1 og 9.
> Nogen her der er skarppe til regular expressions?


Søg: /records/([0-9])([0-9]*)-
Erstat: /records/\1\2-\1
Kurt Hansen (10.06.2011, 00:27)
Thu, 09 Jun 2011 19:08:57 +0200 skrev Andreas Andersen:

>Den 09-06-2011 17:14, Kurt Hansen skrev:


>Søg: /records/([0-9])([0-9]*)-
>Erstat: /records/\1\2-\1


Wauw, det virker :-)

Der mangler bare lidt finpudsning. Jeg havde ikke taget højde for (og
derfor kunne du jo heller ikke), at ikke alle delstrenge er
dobbeltledet. Altså:

/records/584-r.html
/records/586-87-r.html

Som det er nu, bliver eksempel 1 til /records/584-5r.html og det var
ikke meningen. Ka' du klare den og kommer du forbi Viborg en dag, gi'r
jeg en halvliters fra det lokale bryggeri :-)

P.S. Hvis du vil have ulejlighed med at forkjlare hvad det er der sker
hvor, vil jeg blive glad, for jeg skal nok bruge det til andre
lignende tilfælde.
Andreas Andersen (10.06.2011, 06:27)
Den 10-06-2011 00:27, Kurt Hansen skrev:
> Thu, 09 Jun 2011 19:08:57 +0200 skrev Andreas Andersen:
> Wauw, det virker :-)
> Der mangler bare lidt finpudsning. Jeg havde ikke taget højde for (og
> derfor kunne du jo heller ikke), at ikke alle delstrenge er
> dobbeltledet. Altså:
> /records/584-r.html
> /records/586-87-r.html
> Som det er nu, bliver eksempel 1 til /records/584-5r.html og det var
> ikke meningen. Ka' du klare den og kommer du forbi Viborg en dag, gi'r
> jeg en halvliters fra det lokale bryggeri :-)


Søg: /records/([0-9])([0-9]*)-([0-9]*)-
Erstat: /records/\1\2-\1\3-

Hvis man ser på søgeudtrykket, er der 3 ting i spil:

[0-9]: Dette deludtryk matcher et enkelt tal imellem 0 og 9.
*: Denne operator angiver, at det foregående skal matches 0 eller flere
gange. [0-9]* betyder således 0 eller flere tal.
Grupperingsoperatoren (): Med denne navngiver man en del af det fundne,
så man kan henvise til det i erstatningsudtrykket.

Søgeudtrykket betyder derfor i menneskeord:

/records/(Gruppe 1: Et tal imellem 0 og 9)(Gruppe 2: 0 eller flere tal
imellem 0 og 9)-(Gruppe 3: 0 eller flere tal imellem 0 og 9)-

I erstatningsudtrykket kan man henvise til grupperne i søgeudtrykket med
\<gruppenummer>. Det erstatningsudtrykket gør er så at sætte gruppe 1
ind to steder.

Håber det er forståeligt. Regulære udtryk er utrolig nyttige, og de er
meget lettere at forstå, end de ser ud med alle de mærkelige tegn, men
som så meget andet kræver det lidt øvelse.
Lignende emner