Avatar billede azzodiac Nybegynder
26. maj 2004 - 15:57 Der er 6 kommentarer og
1 løsning

Replace HTML tags

Hejsa.

Jeg har en streng, hvori jeg gerne vil fjerne alle HTML tags.
Dvs. alt som står imellem < og >.

Jeg har forsøgt mig med:

txt = "<html>tekst<b>mere tekst</b></html>"

Set regEx = New RegExp
regEx.IgnoreCase = True
regEx.Global = True
regEx.Pattern = "<(.*)>.*<\/\1>"
ResumeText = regEx.Replace(txt, "")
Set regEx = Nothing

txt skulle nu gerne blot indeholde "tekstmere tekst", men jeg kan ikke få det til at fungere. Er mit regulære udtryk forkert, eller griber jeg det forkert an?
Avatar billede fennec Nybegynder
26. maj 2004 - 16:00 #1
denne funktion er fundet her på E. Har selv brugt den.

Function RemoveHTML( strInputText )
dim TAGLIST
  TAGLIST = ";!--;!DOCTYPE;A;ACRONYM;ADDRESS;APPLET;AREA;B;BASE;BASEFONT;" &_
    "BGSOUND;BIG;BLOCKQUOTE;BODY;BR;BUTTON;CAPTION;CENTER;CITE;CODE;" &_
    "COL;COLGROUP;COMMENT;DD;DEL;DFN;DIR;DIV;DL;DT;EM;EMBED;FIELDSET;" &_
    "FONT;FORM;FRAME;FRAMESET;HEAD;H1;H2;H3;H4;H5;H6;HR;HTML;I;IFRAME;IMG;" &_
    "INPUT;INS;ISINDEX;KBD;LABEL;LAYER;LAGEND;LI;LINK;LISTING;MAP;MARQUEE;" &_
    "MENU;META;NOBR;NOFRAMES;NOSCRIPT;OBJECT;OL;OPTION;P;PARAM;PLAINTEXT;" &_
    "PRE;Q;S;SAMP;SCRIPT;SELECT;SMALL;SPAN;STRIKE;STRONG;STYLE;SUB;SUP;" &_
    "TABLE;TBODY;TD;TEXTAREA;TFOOT;TH;THEAD;TITLE;TR;TT;U;UL;VAR;WBR;XMP;" 

  Const BLOCKTAGLIST = ";APPLET;EMBED;FRAMESET;HEAD;NOFRAMES;NOSCRIPT;OBJECT;SCRIPT;STYLE;"
   
  Dim nPos1, nPos2, nPos3
  Dim strResult, strTagName, bRemove, bSearchForBlock, strText
 
  Dim runNo, AttackLimit, strRef
 
  runNo = 1
  AttackLimit = 5
 
  strResult = strInputText
  do
    runNo = runNo + 1
    strRef = strResult
    strText = strRef
    strResult = ""
   
    nPos1 = InStr(strText, "<")
    Do While nPos1 > 0
      nPos2 = InStr(nPos1 + 1, strText, ">")
      If nPos2 > 0 Then
        strTagName = Mid(strText, nPos1 + 1, nPos2 - nPos1 - 1)
        strTagName = Replace(Replace(strTagName, vbCr, " "), vbLf, " ")
        nPos3 = InStr(strTagName, " ")
        If nPos3 > 0 Then
          strTagName = Left(strTagName, nPos3 - 1)
        End If
        If Left(strTagName, 1) = "/" Then
          strTagName = Mid(strTagName, 2)
          bSearchForBlock = False
        Else
          bSearchForBlock = True
        End If   
        If InStr(1, TAGLIST, ";" & strTagName & ";", vbTextCompare) > 0 Then
          bRemove = True
          If bSearchForBlock Then
            If InStr(1, BLOCKTAGLIST, ";" & strTagName & ";", vbTextCompare) > 0 Then
              nPos2 = Len(strText)
              nPos3 = InStr(nPos1 + 1, strText, "</" & strTagName, vbTextCompare)
              If nPos3 > 0 Then
                nPos3 = InStr(nPos3 + 1, strText, ">")
              End If
              If nPos3 > 0 Then
                nPos2 = nPos3
              End If
            End If
          End If
        Else
          bRemove = False
        End If
        If bRemove Then
          strResult = strResult & Left(strText, nPos1 - 1)
          strText = Mid(strText, nPos2 + 1)
        Else
          strResult = strResult & Left(strText, nPos1)
          strText = Mid(strText, nPos1 + 1)
        End If
      Else
        strResult = strResult & strText
        strText = ""
      End If
      nPos1 = InStr(strText, "<")
    Loop
    strResult = strResult & strText
 
  loop until (strRef = strResult) OR (runNo = AttackLimit)
 
  if (runNo >= AttackLimit) then
    strResult = "...text removed..."
    strResult = ""
  end if
  RemoveHTML = strResult
End Function
Avatar billede nozio Nybegynder
26. maj 2004 - 16:01 #2
Eller denne:

function StripHTML(ByRef asHTML)
        Dim loRegExp    ' Regular Expression Object
       
        ' Create built In Regular Expression object
        Set loRegExp = New RegExp
        ' Set the pattern To look For HTML tags
        loRegExp.Pattern = "<[^>]*>"
       
        ' Return the original String stripped of HTML
        StripHTML = loRegExp.Replace(asHTML, "")
       
        ' Release object from memory
        Set loRegExp = Nothing
    End function
Avatar billede fennec Nybegynder
26. maj 2004 - 16:10 #3
nozio >>

Sejt. Jeg har været på jagt efter en HTML ripper i Regular Expression, da den anden er meget indviklet. Men kan den klare at der står < og > (matematiske funktioner) i teksten, som ikke skal fjernes???

f.eks "...Ved at se på Q<=NT*W og n>=Q får vi...."
Avatar billede nozio Nybegynder
26. maj 2004 - 16:14 #4
nix - tror den kokser i det
Avatar billede azzodiac Nybegynder
26. maj 2004 - 17:49 #5
nozio: Perfekt. Tak for hjælpen. Læg bare et svar.
Avatar billede nozio Nybegynder
28. maj 2004 - 08:32 #6
et svar
Avatar billede azzodiac Nybegynder
28. maj 2004 - 12:02 #7
Nozio, jeg har faktisk et andet lignene RegEx problem, som jeg gerne vil give dig 60 yderligere point for, hvis du kan hjælpe mig med det.

Jeg har en streng: "<html><img src="" alt="xxx" /><p>xxx</p><div>xxx</div></html>"

Hvori jeg gerne vil erstatte "xxx" med "<span>xxx</span>", men vel at mærke kun de steder hvor "xxx" optræder imellem HTML-tags.
Dvs. at den skal ikke erstatte "xxx" i billed-tag'en.

Håber du har tid til at hjælpe, på forhånd tak.
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