Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: preg_match_all yksinkertasemmillaan

Sivun loppuun

karvinen [31.07.2005 22:36:47]

#

Yritin tutkia tuota php.net:tiä, mutta ei mennyt jakeluun.

Miten preg_match_all käytetään yksinkertasemmillaan.

Tarkoituksena olisi napata netistä yksi sivu, mitä vähän käsitellään ja tulostetaan muokattu sivu.

Miten tuolla saa napattua esimerkiksi <TITLE> ja </TITLE> tagien välissä olevan tekstin muuttujaan.

Antti Laaksonen [31.07.2005 23:17:50]

#

Funktio siis erottaa tekstistä taulukkoon kaikki tiettyyn säännölliseen lausekkeeseen sopivat osuudet. PHP:n manuaalissa on kyllä aika hyvät esimerkit asiasta. Otsikkotekstin saat suoraan erotettua kirjoittamalla TITLE-tagien välissä olevan osan säännöllisessä lausekkeessa sulkeisiin, jolloin tästä tekstistä tulee erillinen osuus (jos muita sulkeita ei ole, niin indeksillä 1). Jos joka tapauksessa haetaan vain yksi teksti, preg_match kelpaa muuten yhtä hyvin.

karvinen [01.08.2005 09:15:37]

#

<?php
$tiedosto = "https://www.ohjelmointiputka.net";
$sivu = file_get_contents("$tiedosto");
preg_match("/^(<TITLE>)?([^</TITLE>]+)/i", "$sivu", $valmis);
echo "Otsikko on: {$valmis[0]}\n";
?>

Olenko yhtään jäljillä...
Ilmeisesti merkkihaku jotenkin väärin?
Tulostaa tälläsen virheilmoituksen:

Warning: Unknown modifier 'T' in G:\astma\index.php on line 4

Notice: Undefined offset: 0 in G:\astma\index.php on line 5
Otsikko on:

Antti Laaksonen [01.08.2005 11:31:14]

#

Olet, mutta säännöllinen lausekkeesi kaipaa hieman viilausta. Lausekkeen keskellä olevaa /-merkkiä ennen pitää kirjoittaa \-merkki, jotta ei tule sekaannusta lopetusmerkin kanssa. Sulut pitää kirjoittaa juuri sen tiedon ympärille, jonka haluaa saada erikseen - title-tagit pysyvät aina samoina, mutta niiden välissä oleva sisältö kiinnostaa. Huomaa, että hakasulkujen väliin kirjoitetaan merkkiryhmä, ei siis etsittävää tekstiä.

<?php

$teksti = file_get_contents("https://www.ohjelmointiputka.net/");

preg_match("/<title>(.*)<\/title>/i", $teksti, $osat);

echo "Otsikko: " . $osat[1];

?>

karvinen [01.08.2005 13:15:38]

#

Kiitos yritin vain liian vaikeasti...

.* ilmeisesti tarkoittaa, että otetaan kaikki tuolta välistä, mutta mitä tuo /i tuossa tekee.

Antti Laaksonen [01.08.2005 13:49:21]

#

Pääte i tarkoittaa, että kirjainten koolla ei ole merkitystä. Siis sivulla voi lukea yhtä hyvin <html>, <HTML> tai vaikka <hTMl> - kaikki tunnistuvat oikein.

karvinen [01.08.2005 13:54:50]

#

Jatketaan vielä...
onnistuuko allaolevalla esimerkillä poistaa kaikki tiedot mitkä on < ja > välissä siis.

Muuttujassa on <html> moi <body> kalevi

Muuttaa niin, että muuttujaan jää vain moi kalevi

$sivu = str_replace("<*>", "", $sivu);

Bagard [02.08.2005 00:29:20]

#

Olisit toki voinut kokeilla tuota, vai? Kyllähän tuo näyttäisi toimivan (http://koti.mbnet.fi/roinaa/jee.php). Itse en edes tiennyt, että PHP:ssäkin oli tuon tapainen jokeri.

karvinen [02.08.2005 08:41:14]

#

Kyllähän mä tuota kokeilin, mutta ei toiminut.

Pitää kokeilla uudestaan myöhemmin, kun herää vaan...

Bagard [02.08.2005 17:55:34]

#

karvinen kirjoitti:

Kyllähän mä tuota kokeilin, mutta ei toiminut.

Jos mukamas kokeilit sitä ja se ei toiminut, niin miksi sitten kysyit että toimiiko se? :)


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta