Avatar billede bernhof Nybegynder
31. januar 2002 - 22:12 Der er 25 kommentarer og
2 løsninger

Find fejlen!

Jeg er en RegExp begynder, og har skrevet flg kode:

objRegExp.IgnoreCase = True
objRegExp.Global = True
objRegExp.Pattern = "\[color\=(.)+\](.)+\[/color\]"
vTemp = objRegExp.Replace(vTemp, "<font color='$1'>$2</font>")

Ovenstående kode skal kunne replace [COLOR=farve]tekst[/COLOR] med <font color='farve'>tekst</font>

hvad er der galt?
Avatar billede cyberquark Nybegynder
31. januar 2002 - 22:20 #1
Helt ærligt så har jeg selv haft problemmer når jeg skrev/skriver i kode, og kan sku ikke lige se problemet, men hvis du har kazaa eller noget andet (morpheus) så prøv at hente "TrueWeb" som jeg selv har det er meget godt og kan løse alle opgaver, og hvise dig dem som kode, desvære er programmet på Eng, men man kan hente en Update fra nettet, som kan få den til at blive Dansk (updaten, fylder ca. 35 MB, så det er jo ikke så slemt)..!! Håber det kunne hjælpe dig lidt..!! :) :) :) :) :) :) :)
Avatar billede bernhof Nybegynder
31. januar 2002 - 22:41 #2
Jeg har ikke problemer med at overskue kode, kun med at overskue RegExp patterns - og det ændrer sig forhåbentligt snart :) -- desuden kan jeg ikke finde programmet du nævner, og kan det overhovedet hjælpe mig med at lave RegExp. patterns? - men ellers tak for hjælpen! :)
----------
Hvad er der galt med mit pattern?
Avatar billede erikjacobsen Ekspert
31. januar 2002 - 22:42 #3
Dit punktum er sikkert for grådigt, og spiser sikkert din ] og din [
Prøv i stedet for explicit at sortere de to tegn fra


objRegExp.Pattern = "\[color\=([^\]])+\]([^\[])+\[/color\]"
Avatar billede erikjacobsen Ekspert
31. januar 2002 - 22:43 #4
Og så behøver du da vist ikke skrive \= men kan nøjes med =
for det er da ikke et magisk tegn
Avatar billede bernhof Nybegynder
31. januar 2002 - 22:51 #5
Det ser ikke ud til at virke, hvis jeg sætter din linie ind istedet for min egen. Den replacer ikke noget... Jeg er stadig igang med at sætte mig ind i RegExp, så jeg har ikke nogen idé om hvad der kan være galt... Har du?
Avatar billede jespernaur Nybegynder
31. januar 2002 - 22:55 #6
Dit problem er at du i begge tilfælde skal sætte 'plus' indenfor
paranteserne, altså:

objRegExp.Pattern = "\[color\=(.+)\](.+)\[/color\]"

Derved opnås, at samtlige de ønskede tegn bliver inkluderet i $1 og $2,
og ikke kun det sidste (såsom 'e' fra 'farve' og 't' fra 'tekst').

Mvh
Jesper Naur
Avatar billede bernhof Nybegynder
31. januar 2002 - 22:56 #7
Der gælder de samme regler i ASP som i Visual Basic, right?
Avatar billede bernhof Nybegynder
31. januar 2002 - 23:02 #8
Ok, tak skal du have!
Men hvis jeg som en del af 'farve' eller 'tekst' skriver [ og ] så laver den fejl ... kan man undgå dette?
Avatar billede bernhof Nybegynder
31. januar 2002 - 23:10 #9
fx:
abc[COLOR=0000FF]de[f]gh[/COLOR]ijk
udskiftes til:
abc<font color='0000FF]de[f'>gh</font>ijk
Avatar billede erikjacobsen Ekspert
31. januar 2002 - 23:11 #10
Er den ikke stadig grådig, jesper? Nu kender jeg ikke ASPs
version, men (og du har selvfølgelig ret mht +-et) man kan i
hvert fald i andre reg-exp-maskiner:

objRegExp.Pattern = "\[color=([^]]+)\]([^[]+)\[/color\]"

Jeg glemmer altid reglen for [ og ] i en [...]    :))
Avatar billede bernhof Nybegynder
31. januar 2002 - 23:16 #11
erikjacobsen >> nu udskifter den slet intet - og det er ligemeget om der er [ og ] i 'farve'/'tekst' eller om der ikke er.
Avatar billede erikjacobsen Ekspert
31. januar 2002 - 23:20 #12
Ok, jeg opgiver - du er velkommen til at afvise. Det udtryk
virker i PHP, men jeg ved som sagt ikke noget om ASPs
eventuelle specielle ting.
Avatar billede bernhof Nybegynder
31. januar 2002 - 23:30 #13
hehe.. du skal nok få lidt point for din indsats, så jeg hæver dem lige lidt...

men hvad med jespernaur? har du et forslag? :)
Avatar billede erikjacobsen Ekspert
31. januar 2002 - 23:32 #14
Vil du venligst afvise mig nu!
Avatar billede bernhof Nybegynder
31. januar 2002 - 23:36 #15
vil du ikke have point?
Avatar billede erikjacobsen Ekspert
31. januar 2002 - 23:41 #16
Vil du venligst afvise mig nu!
Avatar billede bernhof Nybegynder
31. januar 2002 - 23:48 #17
fair enough!
do, did, done! :)
Avatar billede bernhof Nybegynder
31. januar 2002 - 23:50 #18
Er der nogen der kan hjælpe mig?
Avatar billede jespernaur Nybegynder
01. februar 2002 - 19:58 #19
"Livet er for kort til ASP" (citat erikjacobsen)!

Jeg må indrømme, at jeg igår kørte mine forsøg i Javascript (lettere pinlig sag). Så blev
klokken mange, og jeg kom ikke videre.
I dag har jeg så forsøgt med ASP, og konklusionen er indtil videre, at anvendelsen af paranteser til at opsamle dele af den matchede tekst simpelthen ikke virker i ASP!
(i det mindste den version, jeg har her).

En simpel sag som

ab(cd)ef(gh)i

matcher teksten

abcdefghi

men man får kun 1 element i Matches collection, nemlig den fulde tekst abcdefghi.
Tilsyneladende tåler den paranteserne i det regulære udtryk, men de bliver
ikke behandlet korrekt (der bliver dog kontrolleret for parantesfejl!)

I php og Javascript virker det upåklageligt.

mikbj--> har du mulighed for/lyst til at løse dit problem enten med php, eller på
client-side Javascript, eller skal vi forsøge at komme igennem i ASP med de ovennævnte
begrænsninger?

Tænk hvis Bill Gates ikke fandtes.

Mvh
Jesper Naur
Avatar billede bernhof Nybegynder
01. februar 2002 - 21:36 #20
Mange tak :)
Det er helt fint med mig, men kan det lade sig gøre?

Mit projekt er et forum, hvor man (sjovt nok) kan poste threads.
på newpost-siden kan man bruge kode som tekst og [COLOR=blue]tekst[/COLOR] ligesom i UBB, som så gemmes i databasen.

Det jeg havde tænkt mig at gøre, var at udføre replacements inden threads blev vist, sådan at []-koden blev konverteret til korrekt html <>.

Kan dette gøres med JavaScript?
Avatar billede bernhof Nybegynder
02. februar 2002 - 14:34 #21
... som du nævner det?
Avatar billede jespernaur Nybegynder
02. februar 2002 - 14:40 #22
Du kan jo tænke lidt over følgende forskellige muligheder:

1) Udfør konverteringen i client-side Javascript umiddelbart i forbindelse med indlæsningen
af brugerens indlæg, altså før formen submittes.

2) Udfør konverteringen i server-side ASP-VBScript, anvend håndkraft, da de ellers velegnede
funktioner i RegExp tilsyneladende desværre ikke virker.

3) Udfør konverteringen i en server-side Javascript funktion, som kaldes fra din
VBScript kode. Dette burde kunne gøres, men vær opmærksom på, at parameteroverførsel
mellem VBScript og Javascript funktioner er et meget tyndt beskrevet område.

4) Udfør konverteringen i client-side Javascript direkte i forbindelse med visningen,
med andre ord, send de ukonverterede data til brugerens browser og konverter dem før
visningen.

Mvh
Jesper Naur
Avatar billede bernhof Nybegynder
02. februar 2002 - 14:53 #23
jeg tror jeg snupper nr. 4, fordi:

1) jeg gerne vil bevare den orignale besked med [tags] i databasen,
2) jeg har haft dårlig erfaring med 2 forskellige programmeringssprogs samarbejde :), og
3) RegExp i ASP stinker åbenbart, og jeg vil gerne have noget hurtigt og ordentligt, istedet for en 2nd-hand solution på problemet.

Mange tak for din hjælp indtil videre.
Flere point til rådighed! :)

/Mikbj
Avatar billede bernhof Nybegynder
03. februar 2002 - 15:22 #24
Hvordan kan jeg gøre dette?
Avatar billede bernhof Nybegynder
06. februar 2002 - 18:15 #25
jespernaur?
Avatar billede bernhof Nybegynder
13. februar 2002 - 17:15 #26
jespernaur?
Avatar billede bernhof Nybegynder
14. februar 2002 - 18:06 #27
Efter lang tids intensiv søgen, fandt jeg (endelig) denne kode:

objRegExp.Pattern = "\[color=(.+)\]((.|\n)*?)\[\/color\]"
str = objRegExp.Replace(str,"<font color=" & Chr(34) & "$1" & Chr(34) & ">$2<\/color>")

Dette virker præcis efter hensigten, til brug ved custom tags:

[COLOR=blue]lidt tekst[/COLOR]
udskiftes med
<font color="blue">list tekst</font>

Tak for hjælpen alligvel.

/mikbj
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