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.
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.
<?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:
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]; ?>
Kiitos yritin vain liian vaikeasti...
.* ilmeisesti tarkoittaa, että otetaan kaikki tuolta välistä, mutta mitä tuo /i tuossa tekee.
Pääte i tarkoittaa, että kirjainten koolla ei ole merkitystä. Siis sivulla voi lukea yhtä hyvin <html>, <HTML> tai vaikka <hTMl> - kaikki tunnistuvat oikein.
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);
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.
Kyllähän mä tuota kokeilin, mutta ei toiminut.
Pitää kokeilla uudestaan myöhemmin, kun herää vaan...
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? :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.