webForumDet fria alternativet

RegExp men icke

ASP

6 svar · 247 visningar · startad av Vide

Medlem sedan dec. 19998 577 inlägg
Frågan#1

Hejsan!

Min tur att ställa lite frågor... :)

Det är så att jag håller på med en sökfunktion för mina text-filer på webeye.nu, som den är nu så funkar den så långt att den söker igenom filerna efter det ord man angivit och formaterar det till en annan font. DET funkar bra. MEN när sökningen utförs så vill jag inte att den skall söka i texten mellan < och >, då detta kan ställa till problem i länkar et.c... utan jag vill bara söka utanför html-taggar... Har jag förklarat mig luddigt? Ett exempel:

Jag söker på ordet Distinct i denna text:

Distinct är en SQLare, här är en <a href="www.webeye.nu/distinct.asp">länk</a>

Detta blir ju helt fel, när den formaterar länken så skulle det bli:

Distinct är en SQLare, här är en <a href="www.webeye.nu/<font color=FFFF00>distinct</font>.asp">länk</a>

Alltså inte alls önskvärt... Här är koden för sökningen... Ett litet test av det hela just nu hittar ni här: http://www.webeye.nu/default.asp?que=sok/default.asp

sokstr = request.Form("sokstr")
	http = "http://www.webeye.nu/default.asp?que=asp/artiklar"
	lokal = Server.Mappath("asp\artiklar\")

	Set fso = CreateObject("scripting.FileSystemObject")
	Set fsof = fso.GetFolder(lokal)
	Set fsofi = fsof.files

	'***** Skapar ett Regular Expression  *****'
	Set regEx = New RegExp
	regEx.IgnoreCase = True	
	regEx.Global = True

	chk = 0

	For each fil in fsofi

		'***** Öppnar filen och lägger allt innehåll i variabelnn filecont *****'
		Set filen = fso.OpenTextFile(lokal & "\" & fil.name)
		filecont = filen.ReadAll
		'Response.write "Fil: " & fil.name & "<br>"
	
		regEx.Pattern = sokstr
		Set Matches = regEx.Execute(filecont)
		For each match1 in Matches
			chk = chk + 1
			exit For
		Next
	
		If chk > 0 then
			Response.write "<a href='default.asp?que=sok/default.asp&sokstr2=" & sokstr & "&fil=" & fil.name & "'>" & fil.name & "</a><br>"
		End If
	Next

	If chk = 0 then Response.write "Det fanns ingen träff på ordet <b>" & sokstr & "</b>"

------------------
Kom hem till mig...

Medlem sedan mars 20002 836 inlägg
#2

Hello Vide,

det verkar som om din test funkar.

Provade med en hel del olika sökord och kom vidare med korrekta länkar, ej så som du beskrev här ovan.
[redigerat]
En liten bugg .... hittar den endast en fil med sökordet i så skriver den ut länk till filen och under skriver den att det inte fanns några träffar på sökordet, fast att det fanns en.
[/redigerat]
cya,
PatrikB

------------------
=================================
** ZWGdesign **
=================================

[Redigerat av PatrikB den 13 sep 2000]

Medlem sedan dec. 19998 577 inlägg
#3

En liten missuppfattning... :)

Länkarna till filerna funkar finfint... det är inte som är problemet... utan det är dom länkarna i filen länken leder till som är problemet... Länkarna i den filen blir fel...

// Vide

------------------
Kom hem till mig...

Medlem sedan mars 20002 836 inlägg
#4

Hello igen Vide,

ja, hos mig så funkar även länkarna inne i filerna som man får som resultat efter en sökning.

/PatrikB

------------------
=================================
** ZWGdesign **
=================================

Medlem sedan dec. 19998 577 inlägg
#5

Då har du sökt på ett ord som inte finns med i a-taggen... :)

Om vi nu söker på 'aspguild' så får vi upp en sida 'asp9.asp' och kolla man sökresultatet så ser man att den länken ser lite konstig ut...: http://www.webeye.nu/default.asp?que=sok/default.asp&sokstr2=aspguild&fil=asp9.asp

------------------
Kom hem till mig...

Medlem sedan dec. 19996 721 inlägg
#6

Att endast hitta dessa ord är knepigt, särskilt som RegExp i VBScript är lite haövdant. Det du kan göra är att rensa ut alla taggat ur texten, innan du söker efter matchningarna.

regex.Pattern = "<[^>]+>"

filecont=regex.replace(filecont,"")

Medlem sedan dec. 19998 577 inlägg
#7

hmm... nu har jag kommit så långt att alla formaterade ord så som <a> och andra taggar inte blir påverkade, så att länkarna blir rätt... men länkens titel blir inte formaterad, och det är nu det jag vill komma åt...

Nuvarande kod för visning av filen:

	lokal = Server.Mappath("asp\artiklar\")
	Set fso = CreateObject("scripting.FileSystemObject")
	Set fsof = fso.GetFolder(lokal)
	Set fsofi = fsof.files
	Set filen = fso.OpenTextFile(lokal & "\" & Request.Querystring("fil"))
	filecont = filen.ReadAll
	
	Set regEx = New RegExp
	regEx.IgnoreCase = True	
	regEx.Global = True

strSida = Replace(filecont,Request.Querystring("sokstr2"),"<font color=330000 size=2 class=sokstr>" & Request.Querystring("sokstr2") & "</font>",1,-1,1)
	
	regex.Pattern = "<[^>]*<font color=330000 size=2 class=sokstr>" & Request.Querystring("sokstr2") & "</font>.*>"
	Set matches = regex.execute(strSida)
	
	For each match in matches

		strReplace = replace(match,"<font color=330000 size=2 class=sokstr>","")
		strReplace = replace(strReplace,"</font>","")
		'Response.write "Match: " & match & "<br>strReplace: " & strReplace & "<br>"
		regex.pattern = match
		'Response.write strReplace
		strSida = regex.replace(strSida, strReplace)
	Next
Response.write strSida

------------------
Kom hem till mig...

269 ms totalt · 4 externa anrop · v20260731065814-full.868a69e5
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
131 ms — ändringar (db)