Patrik81Medlem sedan okt. 2001538 inlägg Jag vill öppna en sida, och hämta hem lite text som finns mellan html-taggarna på sidan, men jag får det inte att fungera.
Jag har sökt här på webforum, men hittar inget som hjälper mig, så något måste jag göra fel.
Från början försökte jag använda preg_match, men den betedde sig mer mystiskt än ereg, så därför är den kod jag använder nu (som inte funkar) baserad på ereg, och inte preg_match.
$sHTML = "<b>Fet stil</b><i>kursiv stil</i><font face=\"arial\">Hej</font>";
if (ereg("^[>]{1}[^<]{1}.*[<]{1}$", $sHTML, $aRegs)) {
foreach ($aRegs as $val){
echo($val . "<br>");
}
} else {
echo("Something went wrong!");
}
Normalt sett skulle $sHTML inte ligga definerad i filen utan hämtas från en annan fil, men för att koden skall vara fullständig här skrev jag vara till den.
Det jag alltså vill ha ut är "Fet stil" och "Kursiv stil"
Och eftersom det inte nödvändigtvis behöver vara <b> eller <i> och jag inte fick till det på något annat sätt så tänkte jag att jag kanske kan matcha där en html-tagg slutar (>) och matcha allt fram tills där nästa börjar (<) och sedan får jag i ett senare skede ta bort dem med trim eller något. Men får det som sagt inte att funka alls.
Så skulle någon vilja förklara för mig varför jag bara får "Something went wrong" och kanske slänga ihop ett mönster som funkar?
Och jag vet att preg_match anses snabbare så jag har inget emot svar som använder den, bara att jag som sagt fattade än mindre av den än av ereg ;)
MVH Patrik
MatteMedlem sedan aug. 20002 975 inlägg Tar mig friheten att använda preg :)
För att hämta det som är mellan "rena" taggar (byt ut b mot aktuell tagg)
preg_match_all("/<b>(.*?)<\/b>/is", $sHTML, $match);
Dina träffar har du sedan i arrayen $match[1]. Du kan lista dom med:
foreach ($match[1] as $val) {
echo $val."<br>";
}
Finns där attribut i taggarna så kan du göra t.ex så här:
preg_match_all("/<font[^>]*>(.*?)<\/font>/is", $sHTML, $match);
Träffarna hamnar i arrayen $match[1].
Vill du se hur arrayn $match blir uppbyggd av hämtningen, så kan du under utvecklingen använda följande kod:
echo "<pre>";
print_r($match);
echo "</pre>";
Patrik81Medlem sedan okt. 2001538 inlägg Snabb följdfråga utan att ha testat koden:
preg_match_all("/<font[^>]*>(.*?)<\/font>/is", $sHTML, $match);
vad gör /is ?
när jag försökte med preg_match fick jag klart för mig, efter mycket trilskande att man skulle ha ("/[pattern här]/", $in, $ut); men där fick jag ingen anvisning om /is" så vad gör is?
MVH Patrik
MatteMedlem sedan aug. 20002 975 inlägg i är case-insensitive. Innebär träff på taggen oberoende av gemener/versaler.
s är dot-match-all. .* betyder ju alla tecken, dock inte radbrytning, så kan det man hämtar med .* gå över flera rader så bör man ha med s-et så även radbrytning hämtas med .*.
Du kan läsa mer här: http://se2.php.net/manual/en/pcre.pattern.modifiers.php
Patrik81Medlem sedan okt. 2001538 inlägg har testat nu, det fungerar helt suveränt underbart
TACK!
*mycket glad*
MVH Patrik