HEJ!
Att det inte fungerar förstår jag, du kan väl inte få End of File på ett RegExp?!
Prova http://www.devguru.com/Technologies/vbscript/quickref/RegExp.html, längst ned finns "Test Method".
21 svar · 420 visningar · startad av Addeladde
Har försökt med detta men regexp tillåter inte det
IF NOT objRegExp.EOF THEN
response.write("det finns ett pattern")
END IF
HEJ!
Att det inte fungerar förstår jag, du kan väl inte få End of File på ett RegExp?!
Prova http://www.devguru.com/Technologies/vbscript/quickref/RegExp.html, längst ned finns "Test Method".
Man kan ju få eof i en tabell det är ju inte riktigt heller en fil.
Hej!
Det kan du ju såklart få, men vad vill du egentligen göra, nu blev det ännu krångligare för mig att förstå vad du vill göra?
1. Loopa genom ett rs, köra RegExp på något värde, kontrollera om det passade?
2. Kontrollera om det finns ett värde tillagt till Regexp, dvs att det finns ett Pattern?
3. Något annat?
4. Eller du blev nöjd med svaret?!
Jag vill bara kolla ifall det hittar något pattern i så fall så ska den hämta en sak ur en tabell och sedan göra erättsningen.
Det är ju onödigt att hämta information som ska ersätta regexp patternet om det inte finns någon matchning.
HEJ!
Okej, lite av alt #1. Då ska du nog göra såhär:
pseudkod
if regexp.test then
hämta ur tabell
regexp.replace
end if
Fast, jag är inte med på varför, och på vad, du vill/ska testa först.
Vill du hämta olika data beroende på om uttrycket går igenom?
strSok = "bla bla bla ordsomskaersattas bal bla ba"
pseudkod
if not regexp = NULL then
strReplace = 'hämtas från databasen
regexp.replace
end if
Är det egenskapen Pattern i Regex, som ska vara en tom sträng?
Eller ska ett visst mönster inte ge några träffar på en given text?
1.
Set objRX = New RegExp
strSource = "..."
[blue] .
.
.[/blue]
If objRX.Pattern = "" Then
strReplace = Databas.GetPattern
strSource = objRX.Replace(strSource, strReplace)
End If
2.
Set objRX = New RegExp
strSource = "..."
objRX.Pattern = "\w"
If objRX.Test(strSource) Then
strReplace = Databas.GetPattern
strSource = objRX.Replace(strSource, strReplace)
End If
Det är om ett visst pattern inte ger någon träff.
Då är det metoden Test() du ska använda
If Not objRegExp.Test([i]söksträng[/i]) Then
[blue]'Mönstret gav noll träffar
'hämta ett nytt mönster från databasen och testa igen...[/blue]
End If
Addeladde skrev:
Man kan ju få eof i en tabell det är ju inte riktigt heller en fil.
Man får inte EOF på tabellen med t.ex. SQL utan det är ADO som har propertyn EOF. Att det sen heter EOF kan tyckas vara ologiskt, men jag tror ADO även kan användas för filer. Sen så kan man med file också mena register...
Har fått till det så här nu men jag skulle vilja få ut $1 till variabeln katalog. hur gör jag det?
<%
kod="test asddf sasdf asdf sdf f[blankettarkiv=testkatalog\kat]sdsf sddf sdf sdf sdfd "
'kod = "test asddfjsdadf sadsfdfjsdsdf sdsdjsdf sdsdfjsdfd sdffjsdsdf sdsf"
blankettarkivskod = "startkatalog = [katalog] "
Set objRegExp = New regexp
objRegExp.Global = true
objRegExp.IgnoreCase = true
objRegExp.Pattern = "\[blankettarkiv=(.+)\]"
IF objRegExp.test(kod) THEN
katalog = ' Ska vara regexp objektet som står mellan (.+) alltså $1
replacestring = objRegExp.Replace(kod, blankettarkivskod)
ELSE
response.Write("Det finns inget pattern")
END IF
%>
IF objRegExp.test(kod) THEN
Set objMatches = objRegExp.Execute(kod)
For Each Match In Matches
katalog = Mid(Match.Value, 16)
katalog = Left(katalog, Len(katalog) - 1)
Next
Set objMatches = Nothing
replacestring = objRegExp.Replace(kod, blankettarkivskod)
ELSE
response.Write("Det finns inget pattern")
END IF
Men om jag har två matchingar så får ju katalog det sista av matchingarna eller?
Om du lagrar det i en array då? :)
IF objRegExp.test(kod) THEN
Dim arrKatalog()
i = 0
Set objMatches = objRegExp.Execute(kod)
For Each Match In Matches
ReDim Preserve arrKatalog(i)
arrKatalog(i) = Mid(Match.Value, 16)
arrKatalog(i) = Left(arrKatalog(i), Len(arrKatalog(i)) - 1)
i = i + 1
Next
Set objMatches = Nothing
replacestring = objRegExp.Replace(kod, blankettarkivskod)
ELSE
response.Write("Det finns inget pattern")
END IF
Det jag vill göra är att plocka ut katalog och sedan göra en ersättning i blankettarkivskod. Typ:
replace(blankettarkivskod(, "[katalog]" "$")
och sedan göra regexp replacen för varje objek.
replacestring = objRegExp.Replace(kod, blankettarkivskod)
Detta ska göras för varje pattern som hittas.
Det är för klurigt för att jag ska få till det i alla fall
Va, nu fattar jag inte riktigt? :q
Alltså om vi har en strkod som ser ut så här:
<html>
<title>Testsida</title>
</head>
<body>
Här står lite text
[blankettarkiv=testkat/underkat]
här står lite mer text
[blankettarkiv=testkat2]
</body>
</html>
Blankettarkivskoden ser ut så här:
<%
katalog = [katalog]'diverse aspkod
%>
När man kört koden som vi försker få till så ska resultatet se ut så här:
<html>
<title>Testsida</title>
</head>
<body>
Här står lite text
<%
katalog = testkat/underkat'diverse aspkod %\> här står lite mer text \<% katalog = testkat2 'diverse aspkod %\></body>
</html>
Klurigt klurigt :)
Typ så här kanske? Lite trött, så fel kan (kommer) förekomma. ;)
Dim arrKat()
i = 0
strKod = "<html>" &_
"<title>Testsida</title>" &_
"</head>" &_
"<body>" &_
"Här står lite text" &_
"[blankettarkiv=testkat/underkat]" &_
"här står lite mer text" &_
"[blankettarkiv=testkat2]" &_
"</body>" &_
"</html>"
strBlankett = "katalog = [katalog]" & vbCrLf & "'diverse aspkod"
Set RegExp = New Regexp
RegExp.IgnoreCase = True
RegExp.Global = True
RegExp.Pattern = "\[blankettarkiv=(.+)\]"
Set objMatches = RegExp.Execute(strKod)
For Each Match In objMatches
ReDim Preserve arrKat(i)
strKat = Mid(Match.Value, 16)
strKat = Left(strKat, Len(strKat) - 1)
arrKat(i) = strKat
i = i + 1
Next
For j = 0 To UBound(arrKat)
strTemp = Replace(Split(strBlankett, vbCrLf)(0), "[katalog]", arrKat(j))
Response.Write(strTemp)
Execute(Split(strBlankett, vbCrLf)(1))
Next
Set objMatches = Nothing : Set RegExp = Nothing
Det kommer bli svårt att göra det helt så dynamiskt som du tänker eftersom man bara kan köra Execute på ASP-kod, och om man använder en vanlig Response.Write() på koden skrivs den ut till webbläsaren och tolkas inte av servern.
Jag sparar koden i asp-fil så det är lugnt