Discussion:
Hvilket regulært udtryk skal jeg bruge?
(for gammel til at besvare)
Kurt Hansen
2011-06-09 15:14:18 UTC
Permalink
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?
--
Venlig hilsen
Kurt Hansen

Søges: En person der kan passe heste, som ikke ryger eller drikker.
Andreas Andersen
2011-06-09 17:08:57 UTC
Permalink
Post by Kurt Hansen
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
--
Andreas
Kurt Hansen
2011-06-09 22:27:36 UTC
Permalink
Post by Andreas Andersen
Post by Kurt Hansen
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
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.
--
Venlig hilsen
Kurt Hansen

Søges: En person der kan passe heste, som ikke ryger eller drikker.
Andreas Andersen
2011-06-10 04:27:01 UTC
Permalink
Post by Kurt Hansen
Post by Andreas Andersen
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
/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.
--
Andreas
Loading...