[php]preg_replace vraagje

Pagina: 1
Acties:

Onderwerpen


  • nikao
  • Registratie: November 1999
  • Laatst online: 10-02-2022
ik wil van een url als dit:
http://main.theblazz.com/...0cd55f83576444c59b74f04c9

alleen maar de page als bestandnaam maken

dit zou dus columns.php moeten worden.,

nu heb ik in een dbase de domeinnaam staan:
http://www.theblazz.com

nu haal ik dus eerst http://www. eraf en alles tot en met de domeinnaam (het moet dynamisch gebeuren)
PHP:
1
2
3
4
5
6
7
8
$sql_site = "select url from spiderstat_sites where id = '$site'";
$result_site = mysql_query($sql_site);
$row = mysql_fetch_object($result_site); 
        
$str = $row->url;
$str = ereg_replace ("http://www.","", $str);
    
$value = preg_replace ("|(.*?)$str/|si",'\2', $value);


dan moet ik dus nog alles achter de ? eraf halen
maar als ik dit doe verdwijnt alleen het vraagteken maar:
PHP:
1
$value = preg_replace('|\?(.*?)|si', '\1', $value);


iemand enig id wat er fout gaat?

Verwijderd

Wat denk je van _SERVER["PHP_SELF"] ?!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op 27 June 2003 @ 15:48:
Wat denk je van _SERVER["PHP_SELF"] ?!
wat nu als die url's uit een db komen :X

ontopic: je moet niet alleen die ? matchen ;)

[ Voor 17% gewijzigd door Erkens op 27-06-2003 15:50 ]


Verwijderd

Ohja, sorry :+

  • nikao
  • Registratie: November 1999
  • Laatst online: 10-02-2022
uh.. nee. maar ik heb dus als begin dat ? .., en dan is (.*?) toch voor wat er dan komt... tot het eind.. maar ik heb geen char tot waar ie door moet matchen. .hij moet gewoon door tot het einde.. (of snap ik er nou helemaal nix van)

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

nikao schreef op 27 June 2003 @ 15:54:
uh.. nee. maar ik heb dus als begin dat ? .., en dan is (.*?) toch voor wat er dan komt... tot het eind.. maar ik heb geen char tot waar ie door moet matchen. .hij moet gewoon door tot het einde.. (of snap ik er nou helemaal nix van)
je replaced wat er gematched wordt ;)

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

drm

f0pc0dert

Wat Erkens bedoelt is dat de '\1' uit je tweede argument verwijst naar de 1e match tussen haakjes uit je regular expression. Maar dat was nou precies wat je weg wilde halen. Kortom, maak van het tweede argument een lege string ('') en je probleem is opgelost.

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


  • nikao
  • Registratie: November 1999
  • Laatst online: 10-02-2022
hmm.. nee helaas.. dat verandert niets .

Verwijderd

Okee, ik begrijp je probleem. Je hebt de volgende regexp:

code:
1
|\?(.*?)|si
Het deel tussen haakjes is niet greedy (door dat vraagteken achter het sterretje, standaard is preg wél greedy). Dat betekent dat hij daar zo weinig mogelijk voor pakt, en dat is dus ehh... niets :p. Denk ik althans. Een oplossing zou zijn

code:
1
|\?(.*)|si
te gebruiken, waarbij het deel tussen haakjes wél greedy is, en dus zoveel mogelijk tekst pakt. En anders (ik ben niet zo zeker van mezelf) zorgt
code:
1
|\?(.*?)$|si
er zeker voor dat hij alle tekst tot aan het einde pakt.

Verder is de -s flag volgens mij niet nodig; ik dacht dat die alleen relevant was als je data meerdere regels beslaat.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Waarom gebruik je niet php's ingebouwde functie hiervoor? :)
http://www.php.net/manual/en/function.parse-url.php

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

drm

f0pc0dert

Verder is de -s flag volgens mij niet nodig; ik dacht dat die alleen relevant was als je data meerdere regels beslaat.
Klopt, 's' staat voor 'dot-all' (logisch toch? :+) waarbij de dot (.) ook een newline character matcht :)

ACM has a point here, btw ;)

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


  • nikao
  • Registratie: November 1999
  • Laatst online: 10-02-2022
Verwijderd schreef op 27 June 2003 @ 20:26:
Okee, ik begrijp je probleem. Je hebt de volgende regexp:

code:
1
|\?(.*?)|si
Het deel tussen haakjes is niet greedy (door dat vraagteken achter het sterretje, standaard is preg wél greedy). Dat betekent dat hij daar zo weinig mogelijk voor pakt, en dat is dus ehh... niets :p. Denk ik althans. Een oplossing zou zijn

code:
1
|\?(.*)|si
te gebruiken, waarbij het deel tussen haakjes wél greedy is, en dus zoveel mogelijk tekst pakt. En anders (ik ben niet zo zeker van mezelf) zorgt
code:
1
|\?(.*?)$|si
er zeker voor dat hij alle tekst tot aan het einde pakt.

Verder is de -s flag volgens mij niet nodig; ik dacht dat die alleen relevant was als je data meerdere regels beslaat.
ah..dankje.. dat was het inderdaad.. vraagteken verwijderd en het werkt nu..

kzal es naar die functie kijken ACM :)
Pagina: 1