Hello,
probier mal dies:
$_pos = array();
$lastpos = 0;
$hilfsstring = strtolower($string);
#$suchmuster dann auch strtolower()
while($lastpos = strpos($hilfsstring,$suchmuster,$lastpos)!== false)
{
$_pos = $lastpos;
}
http://de3.php.net/manual/en/function.strpos.php
Regular Expressions sind wahrscheinlich viel teurer als diese Variante.
Solannge das Suchmuster so einfach ist, also nur einen statischen zusammenhängenden String darstellt, geht es so. Sonst würde die Funktion etwas komplizierter werden und sinnvollerweise mit einem Referenz-Parameter für den Haufen arbeiten, anstelle eines Offsets.
Beispiel: gefunden werden soll der String zwischen dem ersten <td> und dem folgenden </td>
function get_data_area(&$indata, # zu durchsuchende Daten
$start, # Startzeidchenkette
$stop, # Stoppzeichenkette
$skip=true) # false --> $indata wird auch verkürzt, wenn kein Treffer war
{
if ($indata === false) return false;
$i_indata = strtolower($indata);
$start = strtolower($start);
$stop = strtolower($stop);
$startpos = strpos($i_indata,$start);
if($startpos === false)
{
if (!$skip)
{
$indata = false;
}
return false;
}
$startlen = strlen($start);
$stoplen = strlen($stop);
$stoppos = strpos($i_indata, $stop, $startpos+$startlen);
if ($stoppos > $startpos)
{
$outdata = substr($indata,$startpos + $startlen,$stoppos - $startpos - $startlen);
$indata = substr($indata,$stoppos + $stoplen);
return $outdata;
}
$indata = false;
return false;
}
Die Start- und Stoppzeichnketten gehören nicht zum gesuchten Teilstring.
Diese Funktion gibt nun nicht die Vorkommensposition zurück, sondern den eingeschlossenen String
Du kannst die Funktion leicht um ein weiteres Attribut (Referenz) erweitern, um auch die Trefferposition zu erhalten.
Ich habe mit der Funktion tausende von HTML-Seiten nach bestimmten Kriterien durchsuchen lassen. Sie ist wesentlich schneller, als eine vergleichbare Regular Expression.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau