Olen tässä yrittänyt opiskella preg_match funktion käyttöä, ei meinaa mennä millään jakeluun, yrittänyt seuraavaa:
$sivu nimisessä muuttujassa on: $sivu = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"> <html> <head> <title>Majakat.com - Näyttää tien nettiin</title> <link rel=\"shortcut icon\" href=\"http://www.majakat.com/images/favicon.ico\" /> <base target=\"_blank\">";
Yritän saada tulostamaan <title>ja</title> tagien välissä olevan tekstin.
If ( preg_match ( "/title.*>?<\/title>/", $sivu, $array ) ) Print $array[0];
Tulostaa:
title>Majakat.com - Näyttää tien nettiin
Tarkoitus olisi saada myös tuo "title>" tuosta pois.
Olen jo saanut niin, että ei ole väliä, onko <title> tai <title jotakin muuta>
Voi olla että on jo liikaa yhteen menoon lukenut tuosta samasta aiheesta, liikaa kokeillut, että ei mene sen takia jakeluun. :D
Tässä on toimiva koodi:
preg_match("/<title>(.*?)<\\/title>/", $sivu, $tiedot); echo $tiedot[1];
Säännöllisen lausekkeen kiinteät osat (aloittava ja lopettava title-tagi) kirjoitetaan aivan tavallisesti, paitsi että lopputagin kauttaviivaa ei voi kirjoittaa sellaisenaan. Tagien väliin jää muuttuva osa, joka kirjoitetaan sulkumerkkien sisään, jotta se ilmestyy omaksi alkiokseen tulostaulukkoon. Merkinnässä .*?
piste tarkoittaa mitä tahansa merkkiä (paitsi rivinvaihtoja), tähti tarkoittaa edellisen merkin toistoa ja kysymysmerkki tarkoittaa, että jos toiston voi tulkita monella tavalla, valitaan niistä tavoista lyhin.
Tässä on vielä pari esimerkkiä sulkujen ja kysymysmerkin käytöstä:
preg_match("/([0-9]+)\\/([0-9]+)/", "3/17", $tiedot); print_r($tiedot); /* ( [0] => 3/17 [1] => 3 [2] => 17 ) /*
preg_match("/<b>(.*)<\\/b>/", "<b>eka</b> <b>toka</b>", $tiedot); print_r($tiedot); /* ( [0] => <b>eka</b> <b>toka</b> [1] => eka</b> <b>toka ) */ preg_match("/<b>(.*?)<\\/b>/", "<b>eka</b> <b>toka</b>", $tiedot); print_r($tiedot); /* ( [0] => <b>eka</b> [1] => eka ) */ preg_match_all("/<b>(.*?)<\\/b>/", "<b>eka</b> <b>toka</b>", $tiedot); print_r($tiedot); /* ( [0] => Array ( [0] => <b>eka</b> [1] => <b>toka</b> ) [1] => Array ( [0] => eka [1] => toka ) ) */
Testaappa tätä:
preg_match_all("/<title>(.*?)<\/title>/", $sivu, $tulos); print_r($tulos);
tietty onnistuu myös preg_match:illa
Aihe on jo aika vanha, joten et voi enää vastata siihen.