SELECT feltnavn1, feltnavn2 FROM tabelnavn where feltnavn1 like
'%$soegefelt% OR feltnavn2 like '%$soegefelt% '
Dette virker fint.
Lad os sige jeg s�ger p� s�tningen "far til fire": F�lgende kommer s� frem
i resultatet:
Filmen hedder Far til fire p� eventyr
Det, jeg �nsker er, at det man s�ger p�, i dette tilf�lde "Far til fire"
bliver markeret med r�dt i resultatet.
Dvs resultatet skulle v�re kodet som flg:
Filmen <span class='rod'>Far til fire</span> p� eventyr
Hvordan f�r man "indhegnet" s�geordene fra s�gefeltet med et <span class>?
Er det en form for manipulation af en tekststreng?
Martin
> Det, jeg �nsker er, at det man s�ger p�, i dette tilf�lde "Far til fire"
> bliver markeret med r�dt i resultatet.
> Dvs resultatet skulle v�re kodet som flg:
> Filmen <span class='rod'>Far til fire</span> p� eventyr
$span0="<span class='rod'>";
$span1="</span>";
$search="far til fire";
$result="Filmen hedder Far til fire p� eventyr";
$pos=stripos($result,$search); // Bem�rk i'et
$length=strlen($search);
$displaystring=substr($result,0,$pos).$span0.substr($result,$pos,$length).$span1.substr($result,$pos+$length);
> Er det en form for manipulation af en tekststreng?
Ja.
Opskriften (som er utestet) er uafh�ngig af om der er
overensstemmelse mellem store og sm� bogstaver i de to strenge.
--
Bertel
http://bertel.lundhansen.dk/ FIDUSO: http://fiduso.dk/
Hilsen Martin
"Bertel Lund Hansen" <unos...@lundhansen.dk> skrev i en meddelelse
news:j57qb5dp1cumk82h3...@news.stofanet.dk...
Ogs� respekt herfra!
Jeg har hidtil k�rt med simple replace-s�tninger, og de havde netop den
irriterende ting at s�gestrengen ikke blev fremh�vet, hvis ikke det var
eksakt match p� store og sm� bogstaver.
--
Philip - http://chartbase.dk | http://www.hitsurf.dk
>Jeg har hidtil k�rt med simple replace-s�tninger, og de havde netop den
>irriterende ting at s�gestrengen ikke blev fremh�vet, hvis ikke det var
>eksakt match p� store og sm� bogstaver.
>
Til geng�ld er den uafh�ngig af hvor mange gange s�geteksten forekommer.
Med Bertels metode skal man huske at l�gge det ind i en l�kke, ellers
finder den kun den f�rste forekomst.
> Til geng�ld er den uafh�ngig af hvor mange gange s�geteksten forekommer.
>
> Med Bertels metode skal man huske at l�gge det ind i en l�kke, ellers
> finder den kun den f�rste forekomst.
Hvis man vil markere alle forekomster og bevare sm�/store bogstaver,
skriger det n�sten p� et regul�rt udtryk. F.eks. noget i retning af:
$regexp = preg_quote($search);
$highlighted = preg_replace('/('.$regexp.')/i', '<span
class="red">$1</span>', $result);
F�rste linje kan udelades, hvis man er sikker p�, at $search ikke
indeholder noget, der kan �del�gge det regul�re udtryk - s� bruger man
bare $search direkte i preg_replace.
M.v.h.
Jonathan
--
Er din email vigtig? Er du tr�t af, at din hjemmeside er nede?
Stabilt webhotel p� redundant setup med daglig backup.
POP3, IMAP, PHP, JSP, Java, Perl, Python, Telnet, SSH, Cron-jobs m.v.
http://www.jsp-hotel.dk/
>Hvis man vil markere alle forekomster og bevare sm�/store bogstaver,
>skriger det n�sten p� et regul�rt udtryk. F.eks. noget i retning af:
>
Nu er jeg bestemt ikke nogen �rn til regul�re udtryk. Derfor forslaget
om en l�kke, jeg bruger det selv j�vnligt.
Men hvis det kan g�res s� enkelt som det du foresl�r, s� er det jo
alletiders.
Vagn Kofoed
Arne Feldborg wrote in dk.edb.internet.webdesign.serverside.php:
> Philip Nunnegaard <nunne...@hitsurf.dk> skrev Sat, 26 Sep 2009
> 08:04:49 +0200
>
>
> Med Bertels metode skal man huske at l�gge det ind i en l�kke, ellers
> finder den kun den f�rste forekomst.
>
--
Vil du l�re at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- P�dagogiske tutorials p� dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials
> Eller man kan bruge str_ireplace(), der �ndre alle forekomster i strengen.
Jo, men den �ndrer dem alle til det der st�r i replace-strengen
uanset hvilke store og sm� bogstaver der stod i forvejen. Det var
derfor jeg gik den tilsyneladende omvej.
> Vagn Kofoed skrev:
>
> > Eller man kan bruge str_ireplace(), der �ndre alle forekomster i strengen.
>
> Jo, men den �ndrer dem alle til det der st�r i replace-strengen
> uanset hvilke store og sm� bogstaver der stod i forvejen. Det var
> derfor jeg gik den tilsyneladende omvej.
Hvis nogen skulle v�re interesseret, s� er her hele den kode jeg
bruger p� usenet.dk's s�gefunktion. Den leder i alle filer med et givet
filtypenavn, og den finder alle forekomster af s�gestrengen, viser et
udsnit og fremh�ver det s�gte. Jeg bruger samme princip p� fifuso.dk.
Hvis s�gestrengen kun indeholder sm� bogstaver, tages der ikke
hensyn til sm� eller store bogstaver, men hvis blot �t tegn er et
stort bogstav, s� s�ges der p� den pr�cise streng.
Det er en begr�nsning at der ikke kan bruges logiske udtryk.
Der s�ges p� det man skriver og ikke andet. Det er ogs� en
begr�nsning at alle tr�ffere vises i �n lang sm�re. Der er ikke
indbygget at man kan bede om f.eks. 20 ad gangen.
Siden behandler $_POST-input fra en anden side
<?
$look=$_POST['look'];
$lookfor=$_POST['lookfor'];
$length=strlen($lookfor);
$lowcase=$lookfor==strtolower($lookfor);
$udsnit=45;
$fundetspan="<span style='background:yellow'>";
$slutspan="</span>";
// ---------------- Main ----------------
if ($look) {
$fundet=0;
$message='';
$searchfolders=glob('*',GLOB_ONLYDIR);
array_unshift($searchfolders,'.');
foreach ($searchfolders as $searchfolder) {
$searchfiles=glob($searchfolder.'/*.php');
foreach ($searchfiles as $searchfile) {
$content=strip_tags(file_get_contents($searchfile));
$pos=($lowcase) ? stripos($content,$lookfor) : strpos($content,$lookfor);
if ($pos!==false) {
// *** Disse 5 linjer har at g�re med et specifikt format p� filnavnene:
$start=strpos($searchfile,'/')+1;
$lng=strpos($searchfile,'.',2)-$start;
$pagecode=substr($searchfile,$start,$lng);
$page=$sider[$pagecode][0];
$message.="<h4><a href='/?side=$pagecode'>$page</a></h4>\n";
// ***
while ($pos!==false) {
++$fundet;
$start=$pos-$udsnit;
if ($start<0) $start=0;
$show_raw=substr($content,$start,$udsnit+$udsnit);
$found=substr($content,$pos,$length);
$show_next=str_replace($found,$fundetspan.$found.$slutspan,$show_raw);
$start=strpos($show_next,' ')+1;
$lng=strrpos($show_next,' ')-$start;
$show=substr($show_next,$start,$lng);
$message.="<p><b>$fundet.</b> $show</p>\n";
$pos=($lowcase) ? stripos($content,$lookfor,$pos+1) : strpos($content,$lookfor,$pos+1);
}
}
}
}
if (!$fundet) echo "Der var ingen tr�ffere.";
else {
echo "<h4>Der var $fundet tr�ffere:</h4>\n";
echo $message;
}
}
?>
Er det s� str_replace() uden i for ignore case?
Vagn
> Er det s� str_replace() uden i for ignore case?
> Vagn
Den ignorerer desv�rre heller ikke store og sm� bogstaver.
> Er det s� str_replace() uden i for ignore case?
Der er mange m�der at lave tingene p�. Hvis du n�rl�ser den kode
jeg sendte senere, vil du se at jeg bruger str_replace(), men det
g�r jeg f�rst efter at jeg har klippet stumpen ud af den fundne
linje s� jeg kan bevare store og sm� bogstaver.
Princippet kort:
1. Find positionen af den s�gte streng - uden hensyn til
store/sm� bogstaver.
2. Tag et udsnit nogle tegn f�r og efter den fundne streng.
2. Klip en stump ud af udsnittet fra find-positionen og frem,
pr�cis s� langt som den s�gte streng.
3. Brug str_replace() s� stumpen omkranses af <span> med den
rigtige klasse.
4. Vis det �ndrede udsnit.
5. Gentag til der ikke er flere eksemplarer af s�gestrengen.
N�r jeg blandede mig var det mere for at holde mig p� quick-'n-dirty
planet.
str_replace() for at erstatte eksakt matches
str_ireplace() for at erstatte uanset case
http://dk.php.net/manual/en/function.str-replace.php
http://dk.php.net/manual/en/function.str-ireplace.php
Jeg er ikke sikker pᅵ, hvad der menes med desvᅵrre.
Hvis man vil have den streng der indsᅵttes anderledes end eksakt, kan
man jo bruge strtolower() eller strtoupper() pᅵ den fᅵrst...
Birger
--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk
> Jeg er ikke sikker pᅵ, hvad der menes med desvᅵrre.
> Hvis man vil have den streng der indsᅵttes anderledes end eksakt, kan
> man jo bruge strtolower() eller strtoupper() pᅵ den fᅵrst...
Ikke helt.
Lad os antage at jeg har sᅵgt pᅵ ordet "jeg" og fᅵr den tekst frem som
jeg citerer i dette indlᅵg.
Den vil ikke fange "jeg", da du har skrevet "Jeg".
Jeg kan heller ikke bruge strtolower, for jeg vil jo gerne bevare det
store 'J' i lige den sᅵtning.
Resultatet er at "Jeg" bliver ignoreret helt (selv om det kommer frem i
sᅵgningen), mens "jeg" gᅵr fint. Omvendt hvis jeg havde sᅵgt pᅵ "Jeg".
>Hvordan f�r man "indhegnet" s�geordene fra s�gefeltet med et <span class>?
>
Lige en udvidelse af Martins oprindelige sp�rgsm�l.
Uanset hvilken af de forskellige forslag man v�lger har de det
tilf�lles, at hvis man bruger wildcards bliver hverken s�getermerne
eller det / de fundne ord markeret.
Findes der en nem m�de at l�se det problem p�.?
$searchterm = 's�geord';
// Skal nok lige have nogle str_replaces ind
echo preg_replace('/' . ($searchterm) . '/s', '<span
class="search">$1</span>', $text);
Fx...
> > Uanset hvilken af de forskellige forslag man v�lger har de det
> > tilf�lles, at hvis man bruger wildcards bliver hverken s�getermerne
> > eller det / de fundne ord markeret.
> > Findes der en nem m�de at l�se det problem p�.?
> $searchterm = 's�geord';
> // Skal nok lige have nogle str_replaces ind
> echo preg_replace('/' . ($searchterm) . '/s', '<span
> class="search">$1</span>', $text);
Det l�ser ikke problemet.
$searchterm = 'heste*';
Hvad vil du stille op med det n�r der returneres 95 linjer med
forskellige tr�ffere?
Den nemme l�sning er selvf�lgelig at n�jes med at fremh�ve
"heste".
--
Bertel
Jeg har f�et ny offentlig mailadresse.
>> echo preg_replace('/' . ($searchterm) . '/s', '<span
>> class="search">$1</span>', $text);
>
>Det l�ser ikke problemet.
>
Jeg er enig i, at det Martins eksempel (der vel bygger p� Jonathans
oprindelige forslag) ikke virker. Men borstet fra det, s� er Jonathans
forslag nok det bedste af dem der hidtil er kommer frem
>Hvad vil du stille op med det n�r der returneres 95 linjer med
>forskellige tr�ffere?
>
Det blir der ikke.
Nu skal det jo selvf�lgelig kunne indg� i mange forskellige sammenh�nge.
Men en s�gning p� Peder i en given sammenh�ng kunne feks. se s�dan her
ud:
http://80.62.84.41/haunstrup/vis_data_reg.php
Det jeg har brug for et, at kunne opn� en tilsvarende effekt med feks.
s�gestrengen: "pe_er%and%"
>Den nemme l�sning er selvf�lgelig at n�jes med at fremh�ve
>"heste".
>
Ja, hvis der kun er eet s�geord, og kun et wildcard i slutningen af
ordet, er det jo ingen sag.
Men selvf�lgelig kan man opl�se s�gestrengen i de enkelte fraser og s�
h�ndtere dem hver for sig.
Sp�rgsm�let var bare, om der er en nememre m�de.
> Det jeg har brug for et, at kunne opn� en tilsvarende effekt med feks.
> s�gestrengen: "pe_er%and%"
> selvf�lgelig kan man opl�se s�gestrengen i de enkelte fraser og s�
> h�ndtere dem hver for sig.
> Sp�rgsm�let var bare, om der er en nememre m�de.
Det er der!
Dette skulle kunne klare b�de wildcards og problemet med evt. flere
resultater i samme streng der skal fremh�ves. Det er ogs� en l�sning til
den oprindelige sp�rgers problem.
$search = "je_s%sen";
$result = "Jens Chr. K. Andersen, Stationsvej 7, �rhus";
$span0 = "<span class='rod'>";
$span1 = "</span>";
$regex = str_replace(array('_', '%'), array('.?', '.*'),
preg_quote($search));
$displaystring = preg_replace("|$regex|i", "$span0\$0$span1", $result);
echo $displaystring;
Jeg har taget udgangspunkt i mysql-wildscards fordi du bruger dem som
eksempel, dvs. _ = �t vilk�rligt tegn, og % = nul eller flere vilk�rlige
tegn. For almindelige mennesker (slutbrugere) ville det m�ske v�re
nemmere at forst�, hvis ? simpelthen bet�d "hvad som helst", dvs. nul
eller flere vilk�rlige tegn, s�dan at "jens?andersen" matcher "Jens
Peter Andersen" osv.
Denne alternative wildcard-l�sning kan implementeres ved at �ndre linje
5 til:
$regex = str_replace('\?', '.*', preg_quote($search));
Hilsen
Martin
>Dette skulle kunne klare b�de wildcards og problemet med evt. flere
>resultater i samme streng der skal fremh�ves. Det er ogs� en l�sning til
> den oprindelige sp�rgers problem.
>
Mange tak for forslaget, det l�ser problemet hvis der kun bruges "_".
Men ved brug af "%" vil det, hvis der er flere forekomster, markere alle
de mellemliggende ord ogs�. Men det er nok vanskeligt at undg�.
Jeg t�nkte s�dan set mere p�, om det var muligt kun at markere selve
s�gefraserne.
>tegn. For almindelige mennesker (slutbrugere) ville det m�ske v�re
>nemmere at forst�, hvis ? simpelthen bet�d "hvad som helst", dvs. nul
>
Tak for det forslag ogs�, det altid kan v�re rart at have i bagh�nden.
Men hvis folk er vant til at s�ge i sql-databaser (og det er feks. meget
brugt indenfor sl�gtsforskning) s� er de ogs� godt kendt med brugen af
wildcards. Og s� vil en generel brug af "%" eller "?" i stedet for "_"
give et altfor upr�cist resultat.
> Men ved brug af "%" vil det, hvis der er flere forekomster, markere alle
> de mellemliggende ord ogs�. Men det er nok vanskeligt at undg�.
Nej, det er s�m�nd let nok :-)
S� skal du bare i linje 5 �ndre '.*' til '.*?'
Derved blev det regul�re udtryk "lazy" i stedet for "greedy".
Fx vil "Peter.*Jensen" matche hele strengen "Peter Kurt Jensen og Morten
Jensen", mens "Peter.*?Jensen" kun matcher "Peter Kurt Jensen".
> Jeg t�nkte s�dan set mere p�, om det var muligt kun at markere selve
> s�gefraserne.
Er s� ikke helt klar over hvad du mener. Mit forslag markerer netop
s�gefraserne.
> Men hvis folk er vant til at s�ge i sql-databaser (og det er feks. meget
> brugt indenfor sl�gtsforskning) s� er de ogs� godt kendt med brugen af
> wildcards.
Ok. S� er det jo fint nok.
Hilsen
Martin