[php] regular expression

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik heb een serie links van bezoekers die via een search engine op m'n site zijn gekomen. nou wil ik graag met een regex de zoekwoorden uit die url filteren, maar wil niet echt lukken.

Ik heb nu zoiets
PHP:
1
$keywords = ereg_replace("^(.*)([hier moet iets komen])(&(.*))*$","\\2",$row['van_url']);


maar daar klopt nog niet veel van
de boundaries van [hier moet iets komen] worden bepaald aan het begin door
p= of query= of q= of iets dergelijk -> m'n script bepaalt eerst bij welke zoekmachine de url vandaan komt en neemt aan de hand daarvan de juiste waarde; maar dat lukt al. het einde wordt gemarkeerd door een &
tenminste...volgens mij kan ik dat op die manier doen.

Maargoed, het lukt me dus niet dat in een regex om te zetten

p.s. ik snap dat ik hiermee nog steeds de zoekwoorden niet apart heb, maar als ik het gedeelte maar heb waar ze in staan, dan lukt dat denk ik wel

[ Voor 13% gewijzigd door Verwijderd op 05-01-2003 02:09 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Ik zou eens kijken naar parse_str
Dat scheelt je een hoop werk denk ik ;)

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

De ^ en $ doen mij geloven dat in $row [ 'van_url' ] enkel een complete url staan en niets anders?

In dat geval kan je het matchen op die 2 achterwege laten, want wat hebben ze in feite met het patroon "q=zoekqueryzut" te maken? Idd, niets ;)

Dus, definieer je patroon aan de hand van het patroon en zijn nabije omgeving, en niet meer dan dat.

Volgens mij kun je volstaan met een
code:
1
/[?&]q=([^&]*)/
waarbij 'q' dus de p of query of q is, zoals je zelf aangeeft. De [?&] geeft aan dat de q wel het begin van een GET variable moet zijn, waarvan een reeks tenslotte met een ? begint, en de verschillende worden onderscheiden door &. Vervolgens moet natuurlijk de get variabele opzich gematched worden, het = teken, en de reeks karakters die volgt, en niet een & is, welke tenslotte de volgende GET variabele aangeeft. Die hoeft niet te komen, maar dat wordt al geimpliceerd door het einde van de regex.

Lees: als hij komt, stop dan met matchen, maar als hij niet komt is 't ook niet erg

Eventueel moet je door een ? achter de * te zetten nog aangeven dat de regex ungreedy moet zijn, maar dat ligt aan de implementatie. Bij ungreedy wordt namelijk de eerstvolgende & genomen, en bij greedy de laatste & die evt. aan de rest van de criteria voldoet.

hth :)

edit:
en Cheatah schoffelt mijn verhaal onderuit met een veel handigere oplossing :(

;)

[ Voor 4% gewijzigd door drm op 05-01-2003 02:20 ]

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

Verwijderd

Ja, dan vond ik ..
PHP:
1
2
parse_str ( $string, $array );
echo $array [ 'q' ];

.. toch handiger :P

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ja, klopt die van cheatah is wel handiger.
maar van die van jou (drm) heb ik veel meer geleerd :-)

het enige irritante van die parse_str is dat ik nooit precies weet wat voor'n key het gedeelte van de array heeft waar de zoekwoorden in zitten

// edit
krijg bij yahoo bijvoorbeeld
dit: http://search_yahoo_com/search?p
of dit: http://search_yahoo_com/bin/search?p
als key. hangt er een beetje van af

[ Voor 29% gewijzigd door Verwijderd op 05-01-2003 02:33 ]


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Dat weet je bij de regex toch ook niet, of snap ik je nou verkeerd?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
probleem is dat er ook nog eens een heel gedeelte van de url in de key zit. en die is nogal variabel. zeker bij google

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

aha, parse_str stript de url totaan de '?' er niet vanaf.... boy, moet je toch nog met de regex aan de slag

*tong naar Cheatah uitsteekt* :P

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
lamaar ik isoleer het juiste gedeelte eerste wel met parse_url
Pagina: 1