Avatar billede mille Nybegynder
12. april 2005 - 22:39 Der er 13 kommentarer

Noget RegExp, men kan ikke lige se hvordan !

Hej gutter.

Jeg har noget kogebogs tekst jeg skal have lavet noget link på, til en intern (hjælpe) søgefunktion..

eks:
Blæksprutterne bankes og skæres i grove stykker. Olivenolien kommes i en tykbundet gryde, hvor hvidløg, timian, løg og chili tilsættes. Når olien er varm, kommes blæksprutterne i og sauteres af. Tilsæt hvidvin, og lad det koge ind til det halve. Befri tomaterne for skind, og skær dem i grove stykker. Kom tomaterne i gryden, og lad det småsimre i ca. 20 min. Retten smages til med koldt smør, salt og peber samt den friskhakkede basilikum og oregano. Serveres evt. med bulgur ved siden af.

Alle ord skal så blive til et link
eks: <a href=/search.asp?item=Blæksprutterne">Blæksprutterne</a> <a href=/search.asp?item=bankes">bankes</a> <a href=/search.asp?item=skæres">skæres</a> <a href=/search.asp?item=grove">grove</a> ovs.

Meennn ord som "i på ved en under af evt." skal ikke blive til links, da de er for alm. til søgninger

Er der en der ved hvordan denne skæres med RegExp

Jeg skal lige nævne at tekterne kan være meget lange, så jeg ved ikke om det er en fordel at bruge arrays når der skal replaces ?

/:) mille
Avatar billede mille Nybegynder
12. april 2005 - 22:45 #1
Skal være i asp......
Avatar billede erikjacobsen Ekspert
12. april 2005 - 22:57 #2
Det er ikke nogen stor hjælp at jeg så kan give dig en kode i PHP, der ser ud til at løse dit problem. Jeg ved ikke hvordan man gør det på samme måde i ASP. Men her er den:

<?

$t="Blæksprutterne bankes og skæres i ... ved siden af.";

$no[]="i";
$no[]="ved";
$no[]="av";

print = preg_replace('/([a-zA-ZæøåÆØÅ]+)/e','f(\'\1\')',$t);

function f($ord) {
  global $no;
  $ord2=strtolower($ord);
  if (in_array($ord,$no)) {
    return $ord;
  } else {
    return "<a href=\"/search.asp?item=".urlencode($ord2).">$ord</a>";
  }
}
Avatar billede erikjacobsen Ekspert
12. april 2005 - 22:58 #3
Ok, det skal være
print preg_replace('/([a-zA-ZæøåÆØÅ]+)/e','f(\'\1\')',$t);
Avatar billede mille Nybegynder
12. april 2005 - 23:10 #4
Jaa, jeg kan godt se fidusen, kan bare ikke lige få den oversat til noget brugbart.....

Help any.....
Avatar billede thesurfer Nybegynder
13. april 2005 - 00:19 #5
Jeg har her prøvet på at oversætte det fra PHP til ASP:

<%
dim t, no, i
t = "Blæksprutterne bankes og skæres i grove stykker. Olivenolien kommes i en tykbundet gryde, hvor hvidløg, timian, løg og chili tilsættes."
no = Array("i","ved","av")

Function InArray(strValue) ' InArray funktionen, der checker om ordet findes i arrayen
For i = 0 to UBound(no)
    If selCriteria(i,1) = cstr(strValue) Then
        InArray = TRUE
        Exit Function
    End If
Next
InArray = FALSE
End Function

function f(ord)
ord2 = LCase(ord)
if InArray(ord2) then
  f = ord
else
    f = "<a href=""/search.asp?item=" & Server.URLEncode(ord2) & ">" & ord & "</a>"
end if
end function
%>

Noget jeg ikke helt forstår (kan ikke finde ud af RegExp), er denne linie:

print = preg_replace('/([a-zA-ZæøåÆØÅ]+)/e','f(\'\1\')',$t);

Hivs jeg kunne få at vide, hvad RegExp'en gør her (ud over at "printe" værdierne), kan jeg måske oversætte den.. jeg skal bare have forklaring "på skrift" (step by step).. :-)

Altså, hvordan den splitter strengen op osv..
Avatar billede thesurfer Nybegynder
13. april 2005 - 00:20 #6
Jeg manglede et "-tegn.. linien skal se sådan ud:

    f = "<a href=""/search.asp?item=" & Server.URLEncode(ord2) & """>" & ord & "</a>"
Avatar billede ranglen Nybegynder
13. april 2005 - 00:22 #7
<%
Const Exceptions = "og i på ved en under af evt"
arrExceptions = Split(Exceptions, " ")

Function f(match, str, pos, source)
    linkok = True
    nocase = LCase(str) 'case insensitive søgning

    For i=0 To UBound(arrExceptions)

        If nocase = arrExceptions(i) Then
            linkok = False
            Exit For
        End If
    Next

    If linkok Then
        f = "<a href=""/search.asp?item=" & str & """>" & str & "</a>"
    Else
        f = str
    End If
End Function


str = "Blæksprutterne bankes og skæres i grove stykker. Olivenolien kommes i en tykbundet gryde, hvor hvidløg, timian, løg og chili tilsættes. Når olien er varm, kommes blæksprutterne i og sauteres af. Tilsæt hvidvin, og lad det koge ind til det halve. Befri tomaterne for skind, og skær dem i grove stykker. Kom tomaterne i gryden, og lad det småsimre i ca. 20 min. Retten smages til med koldt smør, salt og peber samt den friskhakkede basilikum og oregano. Serveres evt. med bulgur ved siden af."

Set re = New RegExp
re.Global = True
re.IgnoreCase = True
re.Pattern = "([a-zA-ZæøåÆØÅ]+)"

str2 = re.Replace(str, GetRef("f"))

Response.Write str2
%>
Avatar billede ranglen Nybegynder
13. april 2005 - 00:29 #8
re.Replace(str, GetRef("f"))

svarer til

preg_replace('/([a-zA-ZæøåÆØÅ]+)/e','f(\'\1\')',$t);

hvor man i php sætter /e på, og kalder funktionen f()
Avatar billede mille Nybegynder
13. april 2005 - 01:04 #9
ranglen svarer du lige ?

Den sad lige i øjet (tkz.)
Avatar billede mille Nybegynder
13. april 2005 - 01:08 #10
Lige et sidste ?

Hvis jeg helt vil fjerne følgende:
% ( ) & ?
som kunne være i teksten, hvordan skulle sættes ind i koden
Avatar billede thesurfer Nybegynder
13. april 2005 - 19:27 #11
Du kunne f.eks. bruge streng = replace(streng, "%", "") .. det erstatter "%" med "" (ingenting)..
Avatar billede Slettet bruger
16. april 2005 - 18:01 #12
Du er alligevel rimelig syg til Reg Exp i php erikjacobsen :o)
Avatar billede ranglen Nybegynder
17. april 2005 - 00:51 #13
ok
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