Avatar billede cht Nybegynder
13. oktober 2001 - 17:17 Der er 7 kommentarer og
1 løsning

Replace vha. RegExp

Jeg har nedenstående kode, som virker fint når jeg skal erstatte noget
tekst, som ikke indeholder tegnet . (punktum) eller \\ (backslash)
har det noget med MO_RegExp.Pattern at gøre og hvordan ændres den evt., det
hjælper nemlig ikke noget bare at fjerne den linie.

<%
Function ErstatOrd(MO_Streng, MO_Ord, MO_Tag1)
    Set MO_RegExp = New RegExp

    MO_RegExp.Pattern    = \"([\\?\\*\\+\\.\\|\\{\\}\\\\\\[\\]\\(\\)])\"
    MO_RegExp.IgnoreCase  = True
    MO_RegExp.Global      = True
    MO_Ord                = MO_RegExp.Replace((MO_Ord), \"\\\\$1\")
    MO_RegExp.Pattern    = \"(\" & (MO_Ord) & \")\"

    ErstatOrd = MO_RegExp.Replace(MO_Streng, MO_Tag1)

    Set MO_RegExp = Nothing
End Function

\'Disse to linier virker ikke
response.write ErstatOrd(\"i denne tekst skal fil1.txt erstattes med
fil2.htm\",\"fil1.txt\",\"fil2.htm\") & \"<br>\"
response.write ErstatOrd(\"i denne tekst skal tekst1/fff erstattes med
tekst2\",\"tekst1]fff\",\"tekst2\")

\'Denne virker fint
response.write ErstatOrd(\"i denne tekst skal 111 erstattes med
222\",\"111\",\"222\")
%>


Mvh. Christoffer Thygesen

e-mail: cht@cht.dk
homepage: http://cht.dk

Avatar billede prof2 Nybegynder
13. oktober 2001 - 17:36 #1
Hvorfor kan du ikke bruge ASP kommandoen replace ?? Hvad er der galt med den ?
Avatar billede eagleeye Praktikant
13. oktober 2001 - 17:37 #2
Dette
MO_RegExp.Pattern = \"([\\?\\*\\+\\.\\|\\{\\}\\\\\\[\\]\\(\\)])\"
MO_Ord = MO_RegExp.Replace((MO_Ord), \"\\\\$1\")

Gør at alle . og \\ i MO_Ord bliver til \\\\. og \\\\\\
Så hvis det ikke er nødvendig vil jeg forslå denne function:


Function ErstatOrd(MO_Streng, MO_Ord, MO_Tag1)
Set MO_RegExp = New RegExp
MO_RegExp.IgnoreCase = True
MO_RegExp.Global = True
MO_RegExp.Pattern = \"(\" & (MO_Ord) & \")\"
ErstatOrd = MO_RegExp.Replace(MO_Streng, MO_Tag1)
Set MO_RegExp = Nothing
End Function
Avatar billede eagleeye Praktikant
13. oktober 2001 - 17:40 #3
men hvis det ikke er nødvendigt af konverter . og \\ i MO_ord kan du som prof2 har skrevet benytte replace functionen:

MO_Streng = replace(MO_Streng, MO_Ord, MO_Tag1)
Avatar billede cht Nybegynder
13. oktober 2001 - 17:42 #4
Grunden til at jeg ikke har brugt ASP kommandoen replace er at med den kan man ikke lave IgnoreCase.
Avatar billede nute Nybegynder
13. oktober 2001 - 17:44 #5
Function ErstatOrd(MO_Streng, MO_Ord, MO_Tag1)
    Set MO_RegExp = New RegExp

    MO_RegExp.Pattern    = \"([\\?\\*\\+\\.\\|\\{\\}\\\\\\[\\]\\(\\)])\"
    MO_RegExp.IgnoreCase  = True
    MO_RegExp.Global      = True
    MO_Ord                = MO_RegExp.Replace( (MO_Ord), \"$1\")
    MO_RegExp.Pattern    = \"(\" & (MO_Ord) & \")\"

    ErstatOrd = MO_RegExp.Replace(MO_Streng, MO_Tag1)

    Set MO_RegExp = Nothing
End Function
Avatar billede cht Nybegynder
13. oktober 2001 - 17:46 #6
>> eagleeye

Mange tak for dit svar. Nu virker det, som det skal.
Avatar billede eagleeye Praktikant
13. oktober 2001 - 17:53 #7
mht. replace function og case sensativ:

Hvis du sætter binær compare er den case sensativ, hvis du sætte tekst compare er den ikke case sensativ:

strText = \"XXXpXXXPXXXpXXX\"
Response.Write replace(strText,\"p\",\"Y\",1,-1,0) & \"<br>\" \' giver XXXYXXXPXXXYXXX
Response.Write replace(strText,\"p\",\"Y\",1,-1,1) & \"<br>\" \' giver XXXYXXXYXXXYXXX
Avatar billede cht Nybegynder
13. oktober 2001 - 18:02 #8
Ja, det er rigtigt. Den binær compare kendte jeg ikke lige til.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester