Toon posts:

ereg langzaam

Pagina: 1
Acties:

Verwijderd

Topicstarter
$fd = fopen($filename, "r");
$fstring = fread($fd, filesize($filename));
ereg ("(.*)<!-- rand -->(.*)<!-- rand_eind -->(.*)", $fstring, $regs);
fclose($fd);
echo $reg[1];

Duurt bij mij eeuwen(nooit dus). Maar zo groot is het bestand niet(40 KB, html) en ik heb het via een $text(10 regels) inplaats van een file geprobeerd en daar deed hij het wel snel).

Iemand?

  • Nazgul
  • Registratie: Februari 2000
  • Laatst online: 11-10-2022

Nazgul

Digital Pizza Crew

Hmmm... Zie zogauw niets echt verkeerds. Heb wel een paar ideetjes:

Ten eerste, volgens mij moet het echo $regs[1]; zijn.

Ten tweede, leest hij het bestand goed in? (staat in de variable de tekst die je verwacht)

No trees were killed in the sending of this message. However a large number of electrons were terribly inconvenienced.


Verwijderd

Topicstarter
Nee, ik had reg(s) al verbeterd en hij leest het bestnad goed in omdat ik gewoon "echo $fstring" kan doen...maar het probleem is de ereg

  • Grum
  • Registratie: Juni 2001
  • Niet online
als jij alleen et 2e item wil ([1]) waarom sla je dan in godsnaam nummer 1 en 3 op ? :P

pak dan gewoon alleen nummer 2 :P

Verwijderd

Gebruik deze ereg:
PHP:
1
2
3
4
<?
ereg ("<!-- rand -->(.*)<!-- rand_eind -->", $fstring, $regs);
echo $regs[1];
?>

als je de waarde tussen rand en rand_eind wilt hebben iig en dat neem ik voor het gemak even aan.

Verwijderd

worldpunch:
code:
1
 /(.*)<!-- rand -->(.*)<!-- rand_eind -->(.*)/

duurt bij mij eeuwen (nooit dus). Iemand?
Misschien dat je regex engine het niet leuk vindt om 4.65 * 104749 keer te backtracken...

Verwijderd

Topicstarter
hmm, maar ik wil regs[1],[2] en [3]. Maar hoe kan ik dan die backengine verminderen? Ik weet niet percies hoeveel tekens erin staan...

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
dan kun je beter simpelweg zoeken naar <!-- rand --> en <!-- rand_eind>, posities bewaren, en dan gaan substringen.
code:
1
2
3
4
5
6
7
8
$rand_start = "<!-- rand -->";
$rand_eind = "<!-- rand_eind -->";
$p1 = strrpos($fstring, $rand_start) + strlen($rand_start);
$p2 = strrpos($fstring, $rand_eind);
$p3 = $p2 + strlen($rand_eind);
$stuk1 = substr($fstring, 0, $p1);
$stuk2 = substr($fstring, $p1, $p2 - $p1);
$stuk3 = substr($fstring, $p3);

de posities zullen waarschijnlijk niet helemaal kloppen

Verwijderd

Topicstarter
wat is er mis met die code? HIj zou moeten werken volgens mij maar ik krijg alle informatie in stuk1 gestopt...

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
oeps, ik zie nu dat strrpos alleen met enkele chars werkt. ik had natuurlijk gewoon strpos moeten gebruiken |:(
dit werkt wel:
code:
1
2
3
4
5
6
7
8
9
10
11
    $rand_start = "<!-- rand -->";
    $rand_eind = "<!-- rand_eind -->";
    $len = strlen($rand_start);
    
    $p1 = strpos($fstring, $rand_start);
    $p2 = strpos($fstring, $rand_eind);
    $p3 = $p2 + strlen($rand_eind);
    
    $stuk1 = substr($fstring, 0, $p1);
    $stuk2 = substr($fstring, $p1 + $len, $p2 - $p1 - $len);
    $stuk3 = substr($fstring, $p3);

Verwijderd

Topicstarter
bedankt!
Pagina: 1