Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Tekstin erotus (preg_match)

karvinen [24.02.2008 16:53:48]

#

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

Antti Laaksonen [24.02.2008 17:25:35]

#

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
        )

)
*/

msdos464 [24.02.2008 17:25:49]

#

Testaappa tätä:

preg_match_all("/<title>(.*?)<\/title>/", $sivu, $tulos);
print_r($tulos);

tietty onnistuu myös preg_match:illa

Vastaus

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

Tietoa sivustosta