webForumDet fria alternativet

Reg.Exp fråga

ASP

23 svar · 447 visningar · startad av voigtann1

Medlem sedan juni 20019 519 inlägg
Frågan#1

Försöke göra ett regulart utryck som plockar ut <body> taggen i en sträng detta är så långt jag har kommit:

Function encode(mess)

Set objRegExp = New regexp
objRegExp.Global = true
objRegExp.IgnoreCase = true
objRegExp.MultiLine = True

objRegExp.Pattern = "&lt;body (bgcolor=""?'?(.*?)'?""?)? ?(text=""?'?(.*?)'?""?)? ?(link=""?'?(.*?)'?""?)?>"
mess = objRegExp.Replace(mess,"$2|$4|$6")
encode = mess
end function

strr = "&lt;body bgcolor='#ff0000' text=#ff000 link='#fff000' >" &Vbclrf &"asd"
response.Write encode(strr)

Problemet är att folk skriver ju inte direkt alltid i den ordningen "jag" gör... kan man göra så att folk ändå kan skriva text och sen bgcolor?

Medlem sedan juli 2003465 inlägg
#2

Kanske ?

objRegExp.Pattern = "&lt;body ((bgcolor=""?'?(.*?)'?""?)|(text=""?'?(.*?)'?""?)|(link=""?'?(.*?)'?""?)?|\s){0,3}>"
Medlem sedan juni 20019 519 inlägg
#3

kalas!
problem bara ... nu kommer tydligen ändå ' alt " med i allt... vilket inte är så kul..

kan man göra samma sak med vlink och bara ändra om {0,3} till 4?

Medlem sedan juni 20019 519 inlägg
#4

fixade det

objRegExp.Pattern = "<body ((bgcolor=""?'?(.*?)""?'?) ?|(text=""?'?(.*?)""?'?) ?|(link=""?'?(.*?)'?""?)? ?|(class=""?'?(.*?)""?'?) ?|/s){0,4}>"

" ?" i slutet på varje gjorde det :D

Medlem sedan juli 2003465 inlägg
#5

voigtann1 skrev:

kalas!
problem bara ... nu kommer tydligen ändå ' alt " med i allt... vilket inte är så kul..

/r du skall inte ha med vlink m.m som text då?

voigtann1 skrev:

kan man göra samma sak med vlink och bara ändra om {0,3} till 4?

japp
det betyder minst 0 träffar och max 3 i detta fallet

Medlem sedan juni 20019 519 inlägg
#6

< ska i slutet ändå vara <

Hur gör jag om jag inte vill att: " &Vbclrf &"asd" skall finnas med... utan att hela reg.exp ersätter orginalet... dvs i slutet vill jag bara ha:
||#ffff|fff| så man kan placera ut det som man vill... dvs om
<body ...>
<h2>hej</h2>

Då skall bara <body> taggen laddas... allt annat tas bort. och vice versa

Medlem sedan juli 2003465 inlägg
#7

Vill du altså få ut <body bg... m.m> eller bara färgen?
Kan du få en <body> som är updelad på 2 eller flera rader?

Medlem sedan juni 20019 519 inlägg
#8

meningen med den är att folk skall kunna skriva <body> taggen och att den skall läggas in med värden i CSS för en DIV... men allt annat förutom <body> skall vara inne i <div>Inne</div>

Medlem sedan juni 20019 519 inlägg
#9

varför börja den bråka nu när jag nästan är färdig?

Function encode(mess)

Set objRegExp = New regexp
objRegExp.Global = true
objRegExp.IgnoreCase = true
objRegExp.MultiLine = True
'mess = Server.HTMLEncode(mess)
'(bgcolor=""?'?(.*?)""?'?) ?|
'objRegExp.Pattern = "&lt;body (bgcolor=""?'?(.*?)'?""?)? (text=""?'?(.*?)'?""?)? (link=""?'?(.*?)'?""?)? ?\>"
objRegExp.Pattern = "<body ((bgcolor=""?'?(.*?)""?'?) ?|(text=""?'?(.*?)""?'?) ?|(link=""?'?(.*?)'?""?) ?|(class=""?'?(.*?)""?'?) ?|(ID=""?'?(.*?)""?'?) ?|\n){0,4}>"
mess = objRegExp.Replace(mess,"$3|$5|$7|$9|$11|")
encode = mess
end function

strr = "<body link='link' bgcolor='bakgrund as' text='text' class='myClass' ID='testID'>asdasda"
response.Write encode(strr)

ID='testID' gör lite sök fel tycker jag... vad kan det beror på?

Medlem sedan dec. 20025 483 inlägg
#10

Innehåller strr endast <body>-kod? Då kanske du kan göra så här:

Function encode(mess)
  dim objRegExp
  set objRegExp = new RegExp
  objRegExp.pattern = "<body"

  if objRegExp.test(mess) then
    objRegExp.pattern = " \w+='([^']+)'"
    objRegExp.global  = true

    dim matches
    set matches = objRegExp.execute(mess)

    dim res
    res = ""
    if matches.count > 0 then
      for each m in matches
	if m.submatches.count > 0 then
	  res = res & m.submatches(0) & "|"
        end if
      next
    end if
  end if
encode = res
end function
Medlem sedan juni 20019 519 inlägg
#11

nej strr kommer inte endast innehålla <body> taggen tyvärr.

Medlem sedan dec. 20025 483 inlägg
#12
Function encode(mess)
  Dim objRegExp
  Set objRegExp = New RegExp

  objRegExp.Pattern    = "<body[^>]*>"
  objRegExp.IgnoreCase = True

  Dim match
  Set body = objRegExp.Execute(mess)

  Dim res
  res = ""

  If body.Count > 0 Then
    objRegExp.Pattern = "\w+='([^']+)'"
    objRegExp.Global  = True

    Dim matches
    Set matches = objRegExp.Execute(body(0))

    For Each m In matches
      If m.Submatches.Count > 0 Then
	res = res & m.Submatches(0) & "|"
      End If
    Next
  End If

  encode = res
End Function
Medlem sedan juni 20019 519 inlägg
#13

men din kod ger bara en massa färger. Medans Glitters kod gör så att man kan fortsätta med en array att man då vet att array(0) ska vara bakgrunden osv.

Medlem sedan dec. 20025 483 inlägg
#14
Function encode(mess)
  Dim objRegExp
  Set objRegExp = New RegExp

  objRegExp.Pattern    = "<body[^>]*>"
  objRegExp.IgnoreCase = True

  Dim match
  Set body = objRegExp.Execute(mess)

  Dim res
  res = ""

  If body.Count > 0 Then
    objRegExp.Pattern = "\w+='[^']+'"
    objRegExp.Global  = True

    Dim matches
    Set matches = objRegExp.Execute(body(0))

    For Each m In matches
      res = res & m & "|"
    Next
  End If

  encode = res
End Function
Medlem sedan dec. 20025 483 inlägg
#15

Om du vill ha ut <body>innehållet</body> också:

Function encode(mess)
  Dim objRegExp
  Set objRegExp        = New RegExp
  objRegExp.Pattern    = "(<body[^>]*>)((?:(?:<(?!/body))|[^<]|\n)*)"
  objRegExp.IgnoreCase = True

  Dim body
  Set body = objRegExp.Execute(mess)

  Dim res
  res = ""

  If body.Count > 0 Then
    objRegExp.Pattern = "\w+='[^']+'"
    objRegExp.Global  = True

    Set matches = objRegExp.Execute(body(0).Submatches(0))

    For Each m In matches
      res = res & m & "|"
    Next

    encode = res & body(0).Submatches(1)
    Exit Function
  End If

  encode = ""
End Function
Medlem sedan juni 20019 519 inlägg
#16

Peter S skrev:

Function encode(mess)
  Dim objRegExp
  Set objRegExp = New RegExp

  objRegExp.Pattern    = "<body[^>]*>"
  objRegExp.IgnoreCase = True

  Dim match
  Set body = objRegExp.Execute(mess)

  Dim res
  res = ""

  If body.Count > 0 Then
    objRegExp.Pattern = "\w+='[^']+'"
    objRegExp.Global  = True

    Dim matches
    Set matches = objRegExp.Execute(body(0))

    For Each m In matches
      res = res & m & "|"
    Next
  End If

  encode = res
End Function

Nu kommer din kod ge:
<body bgcolor=#fff000 text=#ff0000>

#fff000|#ff0000

<body text=#ffff00 bgcolor=#ff0000>

#ffff00|#ff0000

dvs i arrayn blir inte något man kan "lita" på om man nu skulle ha:
<div style='background-color:<%array(0)%>;'>Hej</div>

Medlem sedan dec. 20025 483 inlägg
#17
Function encode(mess)
  Dim objRegExp
  Set objRegExp        = New RegExp
  objRegExp.Pattern    = "(<body[^>]*>)((?:(?:<(?!/body))|[^<]|\n)*)"
  objRegExp.IgnoreCase = true

  Dim body
  Set body = objRegExp.Execute(mess)

  Dim res
  res = ""

  If body.Count > 0 Then
    objRegExp.Pattern = "\w+=(?:'[^']+'|[^\s]+)"
    objRegExp.Global  = true

    Set matches = objRegExp.Execute(body(0).Submatches(0))

    For Each m In matches
      res = res & m & "|"
    Next

    encode = res & body(0).Submatches(1)
    Exit Function
  End If

  encode = ""
End Function
Medlem sedan juni 20019 519 inlägg
#18

jag tror du missförstå mig. jag vill ju ändast få ut färgerna men jag vill att det skall vara i en specifik ordning såsom Glitter har ändå ordnat.

Medlem sedan juli 2003465 inlägg
#19
mess = lcase(mess)
pattern = "((([abcdef])|(\d)){3,6}){0,5}"

är bara för färjer...

Medlem sedan juni 20019 519 inlägg
#20

kom även ihåg att du kan skriva white och ord som är längre än 6 tecken. Jag tror jag har förstått felet nu jag kan inte komma över $9 dvs $11 räknas som $1 & 1
Hmm så nu vet jag inte riktigt hur man skall fortsätta, kanske begränsar sig ändå att man får fylla i en class och ID och bakgrund men inget annat. Förslag? Eller använda Peter S koder och göra det som array och en reg.exp igen innuti arrayn?

274 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
135 ms — ändringar (db)