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?
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
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
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...."
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.