webForumDet fria alternativet

RegExp fundering

ASP

16 svar · 432 visningar · startad av saw

Medlem sedan mars 20011 880 inlägg
Frågan#1

Jag skulle vilja ha hjälp med en patter(tror jag det heter).
Jag ville fånga upp det som står efter/mellan taggarna.
T ex

<table><tr><td>Så här kan det vara</td></tr></table>
Eller hur<BR>
kan gå<P>

I detta fallet så ville jag ha tag på:
Så här kan det vara
Eller hur
kan gå

Jättetacksam för all hjälp.
:e

Medlem sedan maj 200010 687 inlägg
#2

Enkel match!

Dim str, objRegExp

str = "<table><tr><td>Så här kan det vara</td></tr></table>" _
	& "Eller hur<BR>" _
	& "kan gå<P>"

Set objRegExp = New RegExp

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

objRegExp.Replace(str, "")

Set objRegExp = Nothing

Patternet är alltså <[^>]*> som matchar all HTML-kod som sen byts ut mot "". :)

Medlem sedan mars 20011 880 inlägg
#3

Hej Eric. Tack det är en bra början.
Detta gjick inget vidare.
Jag fick bara ut taggarna :(
Jag ville ju ha ut det som stod mellan taggarna, utan att ta bort taggarna.

Medlem sedan mars 20011 880 inlägg
#4

Rätt om jag replaca så får jag inte fram någonting:
Så här ser det ut:

oRE.Pattern = "<[^>]*>"
Set oMatches = oRE.Execute(Text1.Text)
For Each oMatch In oMatches
Text2.Text = Text2.Text & "MultiLang_TEXT" & i & vbTab & Chr(34) & oRE.Replace(oMatch, "") & Chr(34) & vbCrLf
'  Text1.Text = Replace(Text1.Text, oMatch, "<%= MultiLang_TEXT" & i & " %>")
i = i + 1
Next

Några ideer?

Medlem sedan dec. 20003 887 inlägg
#5

Vad är det du vill skriva ut?

Text2.Text = Text2.Text & "MultiLang_TEXT" & i & vbTab & [b]oMatch.value[/b] & vbCrLf
Medlem sedan mars 20011 880 inlägg
#6

Jag fick till det till slut, men resultatet blev inte som jag ville.
Jag hadde tänkt mig att RegEx skulle söka en bit itaget, dvs där han hittade texten. Därefter kopiera över den texten till Text2 och slutligen replaca den textbiten som han har tittat.
Kolla här:

<head>		
<title>Regular Expressions Testare</title>		
<link rel=stylesheet type="text/css" href="style.css">	
</head>	
<body onload="document.forms[0].regexp.select();">	
<h3>Regular Expressions Testare</h3>		
<a href="index.asp">Tillbaka</a><p>

När jag kör detta stycke så blir det:

<head>		
<title><%= MultiLang_TEXT1 %></title>		
<link rel=stylesheet type="text/css" href="style.css">	
</head>	
<body onload="document.forms[0].regexp.select();">	
<h3><%= MultiLang_TEXT1 %></h3>		
<a href="index.asp"><%= MultiLang_TEXT3 %></a><p>

Och detta är NÄSTAN vad jag vill ha, det smiter imellan en del saker t ex

"size="60">
>MultiLine
" & server.htmlencode(request("regexp")) & "

Vad jag skulle vilja är att INTE få med det som står mellan dubbelfnuttarna.
Om det finns mer än en < eller > eftervarandra så vill jag inte ha med det.
Kan man ordna det?

Medlem sedan dec. 20003 887 inlägg
#7

Bähöö? Varifrån kom det där sista?

Nu kanske det är jag som är aningen trög, men skulle du kunna posta en textsnutt med det du vill söka, samt en textsnutt med resultatet, som du vill ha det?

Medlem sedan mars 20011 880 inlägg
#8

Jo om du har läst hela detta inlägget, så det jag frågar efter hur man gör i RegEx, så att jag kan få fram det som står MELLAN taggarna i ett HTML/ASP dokument.
Om html-filen ser ut så här:

<table><tr><td>Så här kan det vara</td></tr></table>
Eller hur<BR>
kan gå<P>

så skall det i tekt2 sparas som (detta är fixat)

MultiLang_TEXT1 "Så här kan det vara "
MultiLang_TEXT2   "Eller hur" 
MultiLang_TEXT3   "kan gå"

Då blir stycket i html (som måste byta namn till asp) till följande:

<table><tr><td><%= MultiLang_TEXT1 %></td></tr></table>
<%= MultiLang_TEXT2 %><BR>
<%= MultiLang_TEXT3 %><P>

Med andra ord, all text som finns i HTML-dokumentet skall ersättas med asp-taggar. Texten skall flyttas över till text2.text, för att sparas som en språkfil.

Det är kanske lite svårt att förklara, men jag gör så gott jag kan.

Medlem sedan dec. 20003 887 inlägg
#9

Ja, men vad är det då som krånglar?

saw skrev:

så skall det i tekt2 sparas som (detta är fixat)

MultiLang_TEXT1 "Så här kan det vara "
MultiLang_TEXT2   "Eller hur" 
MultiLang_TEXT3   "kan gå"

Du lyckas ju föra över all text till Text2 eller är det där du menar att det blir fel?

Medlem sedan mars 20011 880 inlägg
#10

Just nu så kör jag med denna pattern
oRE.Pattern = ">(.*?)<"
Den hittar bl a "= #06:00:00# AND Time " och det vill jag inte(inte något som står mellan fnuttarna.)
Ser det ut så här:
<BR>
Det tror vi inte på
<P>
så hittar han det inte

Medlem sedan dec. 20003 887 inlägg
#11
oRE.Global = True
oRE.Pattern = "<[^>]*>"

strText = oRE.Replace(Text1.Text, "@@") [blue]' @@ för att det knappast förekommer i HTML[/blue]
astrText = Split(strText, "@@")

For i = 0 To UBound(astrText - 1)
  Text2.Text = Text2.Text & "MultiLang_TEXT" & (i + 1) & vbTab & Chr(34) & astrText(i) & Chr(34) & vbCrLf
Next

Det borde ge dig samma resultat, men med all text...

Medlem sedan mars 20011 880 inlägg
#12

Det ser ju kanonbra ut, men jag får ett syntax error hör:

Dim astrText() As String, j As Integer (så här har jag dimmat)

Jag la till ett kommatecken, jag fick fel annars:
astrText = Split(strText, "@@")

Då får jag error:
subscript out off range.

Vad tror du??

Medlem sedan dec. 20003 887 inlägg
#13

Tja...

For i = 1 To UBound(astrText)

*kastar en stor portion VBScript i papperskorgen, jäkla skum arrayhantering*

Medlem sedan mars 20011 880 inlägg
#14

Jag har fått igång det, det är en del buggar, men jag ber att få återkomma.

Medlem sedan mars 20011 880 inlägg
#15

Det finns en stark avigsida med detta systemet.
När jag sedan skall ersätta detta på HTML-sidan så blir dt helt knas.

Är det verkeligen så knepigt att bara plocka ut texten, rad för rad?

Medlem sedan dec. 20003 887 inlägg
#16

Hur ser koden ut nu? Det är kanske enklare att se en lösning om du visar en större portion. För mig låter som om du vill äta kakan och ha kakan kvar... :OO

Att plocka ut texten är inga bekymmer, men det verkar vara värre det du vill göra med den.

Medlem sedan mars 20011 880 inlägg
#17

Visst kunde jag lägga upp all kod här, men det känns lite meningslöst.
Jag laddarförst upp en fil med CommonDialog1.
Därefter så kollar jag att det är en asp-fel, eller så renamar jag den till .asp.
Därefter så kollar jag upp att jag har tre variabler, en med hela
sökvägen, en med hela filnamnet en med filnamn utan extension.
Därefter så skapas två kataloger för senare användning.
Slutligen så skall det parsas:

Dim RegExp As RegExp      
Dim oRE, oMatches As MatchCollection, oMatch, oSubMatch, MultiLang_Titel As String      
Dim nCount, strText As String, strTexten As String, i As Integer      
Set oRE = New RegExp        
i = 1            
oRE.Global = True            
oRE.IgnoreCase = True            
oRE.MultiLine = True            
'TITLAR           
 oRE.Pattern = "<TITLE>(.*?)<\/TITLE>"           
 Set oMatches = oRE.Execute(Text1.text)                    
For Each oMatch In oMatches                    
For Each oSubMatch In oMatch.SubMatches                    
Text2.text = "MultiLang_Titel" & vbTab & Chr(34) & Replace(oSubMatch, vbCrLf, "") & Chr(34) & vbCrLf                    
Text1.text = Replace(Text1.text, oSubMatch, "<TITLE><%= MultiLang_Titel %></TITLE>")                   
Next               
Next
'resten
oRE.Global = True
Dim astrText() As String, j As Integer
oRE.Pattern = "<[^>]*>"
strText = oRE.Replace(Text1.text, "@@") ' @@ för att det knappast förekommer i HTML
astrText = Split(strText, "@@")
For j = 0 To UBound(astrText) - 1
If Len(astrText(j)) > 0 Then  
Text2.text = Text2.text & "MultiLang_TEXT" & (j + 1) & vbTab & Chr(34) & Tecken(astrText(j)) & Chr(34) & vbCrLf  
Text1.text = Replace(Text1.text, astrText(j), "<%= MultiLang_TEXT" & j & " %>")
j = j + 1
End If
Next            
Text2.SetFocus            
Text2.SelStart = Len(Text2.text)            
Set oRE = Nothing

Så här ser hela subben ut. Som du ser så är det nu i två steg,
men fungerar det som du har tänkt dig, så skall ju första steget
bort.

267 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)