/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Split en søgestreng efter både " og mellem~
Fra : Flemming Joensson


Dato : 13-02-03 18:17

Jeg er ved at lave en søgefunktion til min side.

Jeg vil gerne kunne skrive følgende i et søgefelt og søge på sider der
har både ord1 og ord2 i sig og sekvensen ord3 efterfulgt af ord4.

Jeg forstiller mig at det skal skrives på denne måde i feltet:
ord1 ord2 "ord3 ord4"

Jeg vil meget gerne have ovenstående splittet i 3 keywords i et array:
$keyword[0] -> ord1
$keyword[1] -> ord2
$keyword[2] -> "ord3 ord4"

Jeg har forsøgt mig lidt med preg_split og kan på den måde fint få
splittet strengen op i 2 poster:
$keyword[0] -> ord1 ord2
$keyword[1] -> ord3 ord4 //her fjernes mine quotes af preg_split

Så mit problem kan vel egentlig koges ned til at jeg meget gerne vil
kunne se efter jeg har udført preg_split, hvilke ord der var inden i
dobbeltquotes og hvilke der ikke var - hvordan skal jeg skrive det for
at jeg kan gøre det?

Jeg har været ved at kigge på PCRE syntaksen, men kan ikke helt
gennemskue det, så et eksempel vil jeg blive glad for :)

På forhånd tak
Flemming


--
Hvis du vil svare per e-mail skal "fjerndette." fjernes fra
mailadressen.


 
 
Thomas Lindgaard (13-02-2003)
Kommentar
Fra : Thomas Lindgaard


Dato : 13-02-03 23:36

Flemming Joensson <joensson@fjerndette.cs.auc.dk> wrote in
news:Xns9321B9F00BE06joenssoncsaucdk@130.225.247.90:

> Jeg vil gerne kunne skrive f›lgende i et s›gefelt og s›ge p† sider der
> har b†de ord1 og ord2 i sig og sekvensen ord3 efterfulgt af ord4.
>
> Jeg forstiller mig at det skal skrives p† denne m†de i feltet:
> ord1 ord2 "ord3 ord4"

[snip]

> S† mit problem kan vel egentlig koges ned til at jeg meget gerne vil
> kunne se efter jeg har udf›rt preg_split, hvilke ord der var inden i
> dobbeltquotes og hvilke der ikke var - hvordan skal jeg skrive det for
> at jeg kan g›re det?

preg_match_all() er en dejlig funktion :)

Ting i parenteser bliver sorteret ud i arrays (første parentes i eet
array, anden parentes i andet array, osv.), så følgende pattern:

$pattern = '/([a-zA-Z0-9]+)|"([a-zA-Z0-9 ]+)"/';
   
vil resultere i et array indeholdende 3 arrays - det første indeholder
alt det der er blevet matched, og det er de to sidste vi er interesserede
i - de indeholder nemlig det der er blevet matched af første henholdsvis
anden parentes.

Første parentes matcher enkelte ord, mens anden parentes matcher et antal
ord omgivet af gæs.

.... det er nok nemmest bare at give dig koden og en henvisning til
manualen :)

http://www.php.net/manual/en/function.preg-match-all.php

<?php
$search = 'ord1 ord2 "ord3 ord4"';
    $pattern = '/([a-zA-Z0-9]+)|"([a-zA-Z0-9 ]+)"/';
preg_match_all($pattern, $search, $matches);
   
print '<pre>';
print_r($matches);
print '</pre>';
?>

Hyggehej
/Thomas

Flemming Joensson (14-02-2003)
Kommentar
Fra : Flemming Joensson


Dato : 14-02-03 00:54

Thomas Lindgaard <thomas@it-snedkeren.BLACK_HOLE.dk> wrote in
news:Xns9321F00D1E703thomasitsnedkerendk@62.243.74.162:

> Første parentes matcher enkelte ord, mens anden parentes matcher
> et antal ord omgivet af gæs.
>
> ... det er nok nemmest bare at give dig koden og en henvisning til
> manualen :)
>
> http://www.php.net/manual/en/function.preg-match-all.php
>

tak skal du have, den havde jeg ikke lige overvejet at bruge, men den
ser faktisk noget mere anvendelig ud til mit formål - takker endnu en
gang :)

Flemming

--
Hvis du vil svare per e-mail skal "fjerndette." fjernes fra
mailadressen.


Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408946
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste