webForumDet fria alternativet

preg_match - Hämta innehåll mellan body-taggar

PHP

6 svar · 707 visningar · startad av MickeA.com

Medlem sedan feb. 20034 441 inlägg
Frågan#1

Hej

Jag försöker med hjälp av preg_match() läsa ur allt mellan <body ..> och </body> från en htmldokument.

Har Googlat och hittat en del, men alla jag provat inkluderar själva bodytaggarna i träffen.

Såhär har jag gjort:

preg_match("/<body(.*)>(.*)<\/body>/s", $template, $foo);
print_r($foo);

Hur ska mönstret ovan se ut för att bodytaggarna ska exkluderas?

Tack!

Medlem sedan aug. 20039 340 inlägg
#2
preg_match("/<body(.*)>(.*)<\/body>/s", $template, $foo);
echo $foo[2];

...kanske?

Medlem sedan feb. 20034 441 inlägg
#3

Nepp, print_r() skriver ju ut hela array'en och den får bara två värden, där 0 innehåller <body ..></body> och 1 hela dokumentet.

Medlem sedan aug. 20039 340 inlägg
#4
<?PHP
$template = '<body backgrund="css-sucks.bmp"><strong>mmlrmlrmr</strong></body>';
preg_match("/<body([^>]*)>(.*)<\/body>/s", $template, $foo);
print_r($foo);

Behövdes en liten ändring, men koden ovan ger mig:

Array
(
    [0] => <body backgrund="css-sucks.bmp"><strong>mmlrmlrmr</strong></body>
    [1] =>  backgrund="css-sucks.bmp"
    [2] => <strong>mmlrmlrmr</strong>
)
Medlem sedan feb. 20034 441 inlägg
#5

Vilken timing, hittade precis det här på ett annat forum som för exakt det jag vill!

if (preg_match('~<body[^>]*>(.*?)</body>~si', $text, $body))
{
    echo $body[1];
}

Tack ändå!

Medlem sedan aug. 20039 340 inlägg
#6

Samam idé som min ju. :)
Bara att den använder ~ som avslutningstecken (smart, då behöver man inte escapea / i </body>) och inkluderar i, som gör att uttrycket matchar både stora och små bokstäver.

Medlem sedan feb. 20034 441 inlägg
#7

Japp!

264 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)