Avatar billede pelkjaer Nybegynder
15. februar 2003 - 13:06 Der er 8 kommentarer og
1 løsning

Flere regExp søgninger

Jeg forsøger at lave flere søgninger med regExp, men flg. laver kun én.

<%
SearchField = Trim(Request.QueryString("SearchField"))
arrSearchField = Split(SearchField, " ")

For i = LBound(arrSearchField) To UBound(arrSearchField)

Set regEx = New RegExp
  strKeyword = SearchField
  regEx.Global = true
  regEx.IgnoreCase = True

  ' Pattern finder alle ord (eller URL's)
  ' som Keyword finder
  regEx.pattern = "(" & strKeyword & ")"

Next
%>
Avatar billede erikjacobsen Ekspert
15. februar 2003 - 13:16 #1
Måske mener du


<%
SearchField = Trim(Request.QueryString("SearchField"))
arrSearchField = Split(SearchField, " ")

For i = LBound(arrSearchField) To UBound(arrSearchField)

Set regEx = New RegExp
  strKeyword = arrSearchField(i)
  regEx.Global = true
  regEx.IgnoreCase = True

  ' Pattern finder alle ord (eller URL's)
  ' som Keyword finder
  regEx.pattern = "(" & strKeyword & ")"

Next
%>
Avatar billede pelkjaer Nybegynder
15. februar 2003 - 15:26 #2
Erik>>Ja på en måde.

Jeg kan godt se at mit spørgsmål er nærmest ikke-eksisterende, jeg forsøger at uddybe:

Jeg hiver nogle data med over på en side med fx:

side.asp?bla=1&blabla=2&SearchField=teksten

Som du så kan se fanger jeg så SearchField (teksten) med:

Request.QueryString("SearchField")

Så langt så godt. Nu kan jeg så udskifte "teksten" med fx. noget html kode e.lign. med regExp'en. Alt dette virker.

Problem: Har jeg flere parametre med i SearchField ( fx. SearchField=teksten teksten2 teksten3 i linket) kan jeg ikke få regExp'en til at virke.

Dit eks virker på sin vis, blot hiver den konsekvent sidste ord igennem regExp'en, istedet for dem alle som egentlig er målet. Det ligegyldigt om SearchField indeholder 3,4 eller flere parametre.

Så mit spørgsmål er egentlig blot, hvordan får jeg alle mine ord med :)
Avatar billede erikjacobsen Ekspert
15. februar 2003 - 16:28 #3
Nå ja, du laver jo et ny RegExp for hvert gennemløb af for-løkken.
De ord du samler sammen, skal de "AND"-es eller "OR"-es?

Idéen er at bygge regexp strengen op i for-løkken, og kun lave en
RegExp efter for-løkken.
Avatar billede pelkjaer Nybegynder
15. februar 2003 - 18:18 #4
Det lyder lidt som om jeg er på glatis - særligt tidligere i "processen".

Jeg har bygget en lille søgefunktion der virker som følger:

1: søgeside - en form med method="post" indeholdende søgeord(ene) samt filtrering med en select, her AND OR eller EXACT

2: resultatside - lister artikler indeholdene søgte ord - her linker jeg så resultaterne til en detaljeside med "SearchField" i enden. Her er jeg bange for at jeg mister min filtrering..

3: detaljeside - selve artiklen hvori et søgeord indgår. Det er så her jeg bruger regExp til at formattere de faktiske søgeord i artiklen.

------------------------------

Jeg smider lige min kode fra resultatsiden (nr. 2 i processen) hvis det skulle kaste mere lys over mit problem.

<%
Dim CompType, pE_advSearch_String
'Gem querys - OR, AND, EXACT
CompType = Request("CompType")
SearchColumn = "SubMenuContent"

SearchField = "ingenting"
if(Request("SearchParam") <> "") then SearchField = Replace(Trim(Request("SearchParam")),"'","''")

'Check CompType, kør hvis All eller Any
if(CompType <> "EXACT") then
  pE_advSearch_String = "WHERE " & SearchColumn & " LIKE '%"
  'Splits søgning og gem i arrays
  SearchArray=Split(SearchField," ")
  for i = 0 to Ubound(SearchArray)
  if i > 0 then
    'start sql hvis CompType AND/OR
    pE_advSearch_String = pE_advSearch_String & " " & CompType & " " & SearchColumn & " LIKE '%"& SearchArray(i) & "%'"
else
  'Slut sql hvis kun et ord
  pE_advSearch_String = pE_advSearch_String & SearchArray(i) & "%'"
end if
next

else
  pE_advSearch_String = "WHERE " & SearchColumn & " LIKE '%" & SearchField & "%'"
end if
%>

og

<%
Dim rsSearch__pE_String
If (pE_advSearch_String <> "") Then
  rsSearch__pE_String = pE_advSearch_String
End If
%>

og mit sql kald

"SELECT * FROM submenus " + Replace(rsSearch__pE_String,  "'", "'") + ""
Avatar billede pelkjaer Nybegynder
15. februar 2003 - 18:20 #5
Det skal lige siges at søgefunktionen i sig selv fungerer fint. Det er kun regExp'en jeg bøvler med :)
Avatar billede eagleeye Praktikant
16. februar 2003 - 19:10 #6
Hvis den skal udskift flere søge ord i en streng så skal der laves et RegExp object før loopet. Så inde i loopet sættes et patten og du udføre søgningen på en streng...


<%
SearchField = Trim(Request.QueryString("SearchField"))
arrSearchField = Split(SearchField, " ")

str = "Der skal ændre i denne streng, det kan komme fra en DB rs(""kolonnenavn"") eller andet."

Set regEx = New RegExp
regEx.Global = true
regEx.IgnoreCase = True

For i = LBound(arrSearchField) To UBound(arrSearchField)

  strKeyword = arrSearchField(i)

  regEx.pattern = "(" & strKeyword & ")"
  str = regEx.Replace(str , "<b>$1</b>")

Next
%>
Avatar billede pelkjaer Nybegynder
16. februar 2003 - 20:46 #7
Alt for sindsygt - takker.

Nu mangler jeg bare et svar Eagleeye :o)

Erik>>Jeg vil gerne give dig for din tid også - jeg hæver bare point en smule :)
Avatar billede eagleeye Praktikant
16. februar 2003 - 21:51 #8
Jamen det giver jeg gerne.
Avatar billede pelkjaer Nybegynder
19. februar 2003 - 19:52 #9
Takker igen :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester