Avatar billede MrJ Praktikant
21. december 2004 - 14:37 Der er 7 kommentarer og
1 løsning

preg_match: vis en del af en side

Hej eksperter

Jeg er irriteret over at metroen i København ikke altid kører lige godt, og det er irriterende at man står af bussen og finder ud af at metroen ikke kører, da man så kunne have fortsat med bussen i stedet.
På www.m.dk kan man læse hvordan metroen kører. Men da min mobiltelefon ikke er verdens hurtigste på internettet, vil jeg gerne kunne undgå at skulle indlæse hele m.dk for at læse om driftsforstyrrelser.

Jeg har prøvet at lave et script der tager de linjer der handler driften, for at vise dem på en ellers tom hjemmeside, da dette vil være meget hurtigere at indlæse på telefonen.
Problemet er at jeg ikke kan få det til at virke (jeg er ikke særlig god til preg_match())

Mit script so far:

$file = file_get_contents("http://www.m.dk");
if (preg_match ( "/<div class=\"teaser\">(.*)<\/div><\/td>/i", $file, $res)) {
echo $res[1];
}

Der kommer ikke nogen fejl, men der skrives heller ikke noget ud. Jeg har prøvet at ændre på de strings den kigger efter i html koden, men jeg har desværre ikke fået det til at virke :(

Jeg ved godt at det er lidt af et luksus problem, men det kunne være meget rart hvis det kunne lade sig gøre :)


Mvh effer
Avatar billede dejbjerg Nybegynder
21. december 2004 - 15:09 #1
Here is a faster way of extracting a special phrase from a HTML page:

Instead of using preg_match, e.g. like this:
preg_match("/<title>(.*)<\/title>/i", $html_content, $match);

use the following:
<?php
function ExtractString($str, $start, $end) {
  $str_low = strtolower($str);
  if (strpos($str_low, $start) !== false && strpos($str_lower, $end) !== false) {
  $pos1 = strpos($str_low, $start) + strlen($start);
  $pos2 = strpos($str_low, $end) - $pos1;
  return substr($str, $pos1, $pos2);
  }
}
$match = ExtractString($html_content, "<title>", "</title>");
?>
Avatar billede MrJ Praktikant
21. december 2004 - 15:16 #2
Har prøvet følgende:

function ExtractString($str, $start, $end) {
  $str_low = strtolower($str);
  if (strpos($str_low, $start) !== false && strpos($str_lower, $end) !== false) {
  $pos1 = strpos($str_low, $start) + strlen($start);
  $pos2 = strpos($str_low, $end) - $pos1;
  return substr($str, $pos1, $pos2);
  }
}
$test = "dette er m1 underligt m2 ";
$match = ExtractString($test, "m1", "m2");
echo $match;

Så skulle den vel udskrive "underligt". Men der sker stadig ikke noget. Heller ingen fejl.
Avatar billede detox Nybegynder
21. december 2004 - 15:19 #3
Der er en lille fejl i funktionen:

if (strpos($str_low, $start) !== false && strpos($str_lower, $end) !== false) {

skal være:

if (strpos($str_low, $start) !== false && strpos($str_low, $end) !== false) {
Avatar billede dejbjerg Nybegynder
21. december 2004 - 15:24 #4
hmm..har ikke php på denneher maskine, kan ikke teste det, men jeg kan ikke umiddelbart se noget galt, det skulle virke..
Avatar billede dejbjerg Nybegynder
21. december 2004 - 15:25 #5
øhm...nåh ja
Avatar billede MrJ Praktikant
23. december 2004 - 11:56 #6
Det virker jo fint nu. Det var rart at få lavet en hurtig side til at se metroens drift på.


Tak for hjælpen begge to.
Hvis i lægger et svar kan i få point.
Avatar billede detox Nybegynder
23. december 2004 - 11:57 #7
Var så lidt.
Avatar billede MrJ Praktikant
27. december 2004 - 14:51 #8
Kun et svar.
Så får detox alle point
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester