Avatar billede lund_dk Praktikant
02. december 2007 - 21:33 Der er 16 kommentarer og
1 løsning

Hjælp til replace funktion

"123"


erstatter jeg med

strContent = replace(strContent,"[citat]","<div class=""citat"">",1,-1,1)
strContent = replace(strContent,"[/citat]","</div>",1,-1,1)

men HVIS min ctat taq ser sådan her ud

[citat=Lund]123[/citat]

skal jeg have erstattet det således at output bliver
<div class="citat"><b>Lund:</b></citat>

Hvordan gør jeg det..

Bemærk BEGGE ting kan forekomme, så skal tage høje for enten eller.
Avatar billede erikjacobsen Ekspert
02. december 2007 - 22:28 #1
Jamen, det kan man godt i gammeldags ASP/VBScript. Behold de to replace du har, og tilføj een med et regulært udtryk. Her er et testscript, du skal selvfølgelig ikke bruge response.write.

  s = "Der er
"øl"
i " &  vbcrlf &  " [citat=vodka]flasken[/citat]"
  Set r = New RegExp
  With r
  .Pattern = "\[citat=([^]]+)\]"
  .IgnoreCase = True
  .Global = True
  End With
  response.write server.htmlencode(r.Replace(s,"<div class=""citat""><b>$1:</b></citat>"))

Den udskriver:

Der er
"øl"
i <div class="citat"><b>vodka:</b></citat>flasken[/citat]

Det er faktisk ikke helt klart hvad du ønsker - hvor blev 123 af? Og der er ikke noget i HTML, der hedder "</citat>".
Avatar billede lund_dk Praktikant
02. december 2007 - 22:41 #2
Sorry

[citat=Lund]123[/citat]
skal blive til

<div class="citat"><b>Lund:</b>123</div>

:)
Avatar billede lund_dk Praktikant
02. december 2007 - 22:41 #3
Jeg har mine nuværende replaces som ser sådan her ud

    strContent = replace(strContent,"","<strong>",1,-1,1)
    strContent = replace(strContent,"
","</strong>",1,-1,1)
    strContent = replace(strContent,"","<i>",1,-1,1)
    strContent = replace(strContent,"
","</i>",1,-1,1)
    strContent = replace(strContent,"","<u>",1,-1,1)
    strContent = replace(strContent,"
","</u>",1,-1,1)
    strContent = replace(strContent, vbcrlf, "<br>")
    strContent = replace(strContent,"[citat]","<div class=""citat"">",1,-1,1)
    strContent = replace(strContent,"[/citat]","</div>",1,-1,1)
Avatar billede lund_dk Praktikant
02. december 2007 - 22:50 #4
Jeg har sat den op sådan her

    strContent = replace(strContent,"","<strong>",1,-1,1)
    strContent = replace(strContent,"
","</strong>",1,-1,1)
    strContent = replace(strContent,"","<i>",1,-1,1)
    strContent = replace(strContent,"
","</i>",1,-1,1)
    strContent = replace(strContent,"","<u>",1,-1,1)
    strContent = replace(strContent,"
","</u>",1,-1,1)
    strContent = replace(strContent, vbcrlf, "<br>")
    strContent = replace(strContent,"[citat]","<div class=""citat"">",1,-1,1)
    strContent = replace(strContent,"[/citat]","</div>",1,-1,1)
      Set r = New RegExp
      With r
      .Pattern = "\[citat=([^]]+)\]"
      .IgnoreCase = True
      .Global = True
      End With
      strContent = r.Replace(strContent,"<div class=""citat""><b>$1:</b></div>")



Men den ændrer desværre ikke det ønskede, kun
""
ikke [citat=Lund][/citat]
Avatar billede lund_dk Praktikant
02. december 2007 - 22:51 #5
Får egentlig også et problem hvis man kun skriver [citat], så får jeg ikke lukket mit div :/

Kan man også der tjekke om der også er afsluttet? og kun hvis taq er afsluttet skal den lave en replace?
Avatar billede erikjacobsen Ekspert
02. december 2007 - 22:56 #6
Så skal du jo ikke have "</div>" med i sidste linie. Hvad kommer der ud af dine replacer med [citat=Lund]?
Avatar billede erikjacobsen Ekspert
02. december 2007 - 23:00 #7
Dette

  s = "Der er
"øl"
i " &  vbcrlf &  " [citat=vodka]flasken[/citat]"
  Set r = New RegExp
  With r
  .Pattern = "\[citat=([^]]+)\](.*?)\[/citat\]"
  .IgnoreCase = True
  .Global = True
  End With
  Set q = New RegExp
  With q
  .Pattern = "\[citat\](.*?)\[/citat\]"
  .IgnoreCase = True
  .Global = True
  End With
  s=r.Replace(s,"<div class=""citat""><b>$1:</b>$2</div>")
  s=q.Replace(s,"<div class=""citat"">$1</div>")
  response.write server.htmlencode(s)

giver

  Der er <div class="citat">øl</div> i <div class="citat"><b>vodka:</b>flasken</div>

Men hvis

  s = "Der er
"øl"
i " &  vbcrlf &  " [citat=vodka]flasken"

giver det

  Der er <div class="citat">øl</div> i [citat=vodka]flasken
Avatar billede lund_dk Praktikant
02. december 2007 - 23:01 #8
med [citat=Lund]
<div class="citat"><b>Lund:</b></div>1234<br>sdsad<br>a&nbsp; sd asd</div>

Den lukker 2xdiv, men det må være en kombination af den de 2 citat replace
Avatar billede erikjacobsen Ekspert
02. december 2007 - 23:07 #9
Så kig på mit sidste udkast. Den er ikke perfekt, hvis man glemmer en [/citat], men der sker i hvert fald noget ;)
Avatar billede lund_dk Praktikant
02. december 2007 - 23:08 #10
s = "Der er
"øl"
i " &  vbcrlf &  " [citat=vodka]flasken[/citat]"
  Set r = New RegExp
  With r
  .Pattern = "\[citat=([^]]+)\](.*?)\[/citat\]"
  .IgnoreCase = True
  .Global = True
  End With
  Set q = New RegExp
  With q
  .Pattern = "\[citat\](.*?)\[/citat\]"
  .IgnoreCase = True
  .Global = True
  End With
  s=r.Replace(s,"<div class=""citat""><b>$1:</b>$2</div>")
  s=q.Replace(s,"<div class=""citat"">$1</div>")
  response.write server.htmlencode(s)

syntes jeg faktisk virker udemærket.. :)
Avatar billede lund_dk Praktikant
02. december 2007 - 23:09 #11
og dog, den fejler en del hvis nu jeg har

citat inde i citat
Avatar billede erikjacobsen Ekspert
02. december 2007 - 23:10 #12
Så prøv den på

  s = "Der er
"øl i " &  vbcrlf &  " [citat=vodka]flasken"
"

Der vil du kunne se hvorfor jeg ikke synes den er perfekt. Det er også ligemeget, bare den er go' nok.
Avatar billede erikjacobsen Ekspert
02. december 2007 - 23:11 #13
Og citat i citat fejler også. Det kan du bare forbyde, ik' ?

Du skal, groft sagt, vælge mellem at
1) Håndtere manglende [/citat]
2) Håndtere indlejrede
"..."
blokke.

Alt kan løses hvis man parser sig igennem teksten, tegn for tegn, symbol for symbol, men så snakker vi ikke regulære udtræk længere.
Avatar billede erikjacobsen Ekspert
02. december 2007 - 23:12 #14
udtræk, udtryk, .... mon tandlæger snakker om "regulære udtræk", når de trækker tænder ud ... :)
Avatar billede lund_dk Praktikant
02. december 2007 - 23:19 #15
Okai, så jeg må vælge mellem pest eller kolera, eller finde på en anden løsning.. Hmm..

Måske man bare i stedet skulle lave en form for linie-break med

----------------------------------------------------
Lund:
teksten
----------------------------------------------------
fremfor de dumme divs der vil fucke designet og alt muligt andet op på et tidspunkt..


smidt et svar for nogle gode bud :)
Avatar billede erikjacobsen Ekspert
02. december 2007 - 23:19 #16
Nej tak.
Avatar billede lund_dk Praktikant
16. januar 2008 - 15:44 #17
Lukker
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