Christoffer skrev:
> Jeg har brug for lidt hjælp til at lave noget erstatning. Jeg
> vil gerne have erstattet alle steder hvor tegnet forekommer en
> gang, men det skal ikke erstattes hvis det står to gange i
> træk. Det kunne f.eks. være dette hvor jeg gerne vil erstatte
> b med a, men altså ikke hvor der står bb eller bbb:
Regex er din ven. Du har brug for noget der kaldes "lookaround" -
som vbscript desværre kun understøtter halvt.
Følgende regex fungerer i .net, men ikke i vbscript:
1) (?<!b)(b)(?!b)
Det matcher et b der hverken følger efter eller står før et andet
b.
I vbscript kan man lave følgende udgave:
2) [^b](b)(?!b)
Det matcher et b der står efter noget der ikke er et b - og ikke
står før et andet b. Den lille forskel kan vises med et par
eksempler:
A) "a b c abc aabbcc"
B) "b c a abc aabbcc"
C) "a b c abc aabbcc b"
Når der skal erstattes, skal vi dog også have en reference til
tegnet før b:
3) ([^b])(b)(?!b)
Strengen A giver ikke problemer i nogen af de to udtryk.
I B matcher regex nr 2 og 3 ikke det første b i strengen ikke (da
der jo ikke er et tegn som "ikke er b" før b'et. Regex 1 (der
desværre ikke fungerer i vbscript/asp) matcher korrekt.
C matches korrekt af begge udtryk - men er taget med for at
illustrere hvorfor man ikke bare skriver [^b](b)[^b] - gør man det,
bliver det sidste b heller ikke matchet.
Problemet med b'er forrest i sætningen kan dog løses i vbscript-
regex ved brug af ordgrænser (word boundary) - der for at gøre det
hele lidt sjovere skrives \b (b'et er her en specialkode - ikke et
normalt b).
Her følger et regex der ved første øjekast skulle kunne klare
opgaven:
4) \b(b)(?!b)|([^b])(b)(?!b)
Delingen fungerer bare ikke korrekt.
Du kan afprøve det her:
http://gyros.dk/usenet/asp/regex.asp?r=1
- et lidt bedre forsøg er her:
<
http://gyros.dk/usenet/asp/regex.asp?r=2>
Se mere om regex (regulære udtryk) her:
<
http://www.regular-expressions.info>
Vender tilbage senere...
--
Bolig søges. Andel eller leje i Emdrup, Nordvest, Nørrebro, Søborg
eller Brønshøj, max 6000 pr. måned.
Kontakt pr. mail - nospam(at)gyros.dk
Jens Gyldenkærne Clausen