strpos() - Rückwärtssuche?
Paeda
- php
Hallo,
und zwar bin ich gerade dabei einen größeren String zu durchsuchen. Mir sind 2 Wortlaute bekannt, dessen Postion ich innerhalb des großen Strings ermitteln muss.
Erklärung:
$gesamt = gesamter Text
$suche_1 = kurzer zu suchender String, kommt mehrmals im Text vor ("href")
$suche_2 = eindeutiger kurzer String (form: ">Gesucht<")
Nun kann ich ja ganz einfach per strpos() die Position von $suche_2 ermitteln, das klappt auch. Ich komm nur nich drauf, wie ich nun abhängig von dieser Postion die Position von $suche_1 ermitteln kann. strpos() lässt ja leider keine Rückwärtssuche zu. Fakt ist, $suche_1 kommt mehrmals im Text vor und ich brauche nur die, die als letztes vor $suche_2 auftaucht.
bsp:
<a href="link_a.html">Test</a> bla bla bla <a href="link_2.html">Gesucht</a>
In dem Fall würde ich also '>gesucht<' (Groß-/Kleinschreibung sollte die Suche nicht beeinflussen) ermitteln und bräuchte die Position von 'href', welches den Link 'link_2.html' enthält. Ergebnis soll nämlich sein, dass ich diesen gezielten Link auslesen, da dieser eine benötigte ID beinhaltet.
Ich hoffe, ihr könnt mir weiterhelfen.
Gruß
Paeda
Hallo Paeda.
strpos() lässt ja leider keine Rückwärtssuche zu.
Dafür gibt es ja auch strrpos.
Einen schönen Dienstag noch.
Gruß, Mathias
Dafür gibt es ja auch strrpos.
richtig, jedoch läuft auf dem server noch kein PHP 5, und daher kann mit der funktion nur nach einzelnen chars gesucht werden, nicht nach kompletten strings, was es für mich unbrauchbar macht :/
zitat php.net:
"Beachten Sie, dass needle unter PHP 4 in diesem Fall nur ein einzelnes Zeichen sein kann. Wenn Sie eine Zeichenkette als needle übergeben, wird nur deren erstes Zeichen verwendet.
[...]
Anmerkung: Der Parameter needle kann seit PHP 5.0.0 auch ein String aus mehr als einem Zeichen sein."
mir wurde an anderer stelle bereits mit einem regulären ausdruck weitergeholfen, der leider noch nicht ganz funktioniert.
function extract_href($suchwort, $text) {
$result = '';
if (preg_match(
'§<a href="'["'].*?>' . preg_quote($suchwort, '§') . '</a>§is',
$text,
$match)) {
$result = $match[1];
}
return $result;
}
das suchmuster kommt allerdings mit dem gegebenen html-code noch nicht ganz zurecht, da es sich eben nicht um einfache, nicht formatierte links handelt, sondern:
<a href="WANTEDLINK" onmouseover="some_mouseover" onmouseout="some_mouseout"><span class="css_varriert"><span class="css_varriert_ebenso">BEKANNTER_LINKNAME</span></span></a>
da haben wir das übel. wie gesagt, leider kein standard <a href="#">name</a>-link. "WANTEDLINK" möchte ich nun eben auslesen, "BEKANNTER_LINKNAME" ist mir bekannt, danach kann ich gezielt suchen. problem hierbei, die css-klassen und mouseover varrieren je nach link, sind also nicht identisch, so kann ich diese also nicht 1zu1 in die syntax übernehmen, sondern auch suchmuster definieren und naja -.-
könnte man mir vielleicht noch einmal weiterhelfen?? nach über einer stunde rumprobieren und anpassen der syntax komm ich zu keinem ergebnis :(
Servus,
nach über einer stunde rumprobieren und anpassen der syntax komm ich zu keinem ergebnis :(
Was hast du denn probiert?
Wenn ich das richtig sehe interessierst du dich fuer folgendes:
'<a ([1])href="(gesuchte Stelle)"([2])>(Suchwort)<'
[1] = irgendwas mit min. einem Leerzeichen am Ende, oder auch nix
[2] = wie [1] nur mit Leerzeichen am Anfang statt am Ende
Setz das in einen Regex um.
Gruss
Patrick
Servus,
ach wie dumm von mir :\ Folgendes tuts auch:
'<a([1]) href="(gesuchte Stelle)"([1])>(Suchwort)<'
[1] = irgendwas mit min. einem Leerzeichen am Anfang, oder nix
Vielleicht noch als Hilfestellung: Regex sind gierig (greedy)!
Gruss
Patrick