"We are back" « oc.at

[PHP] erstes vorkommen eines strings in einem anderen string

flaimo 20.05.2002 - 01:30 966 4
Posts

flaimo

ILFTKYS
Avatar
Registered: Dec 2001
Location: ask a ninja
Posts: 872
folgendes. ich hab da einen artikel und einen suchbegriff und ich hätte gern die position vom ersten vorkommen des suchbegriffes in dem artikel. ich hab zwar schon in mein php buch gesucht, aber nur a funktion für das finden von einem buchstaben gefunden (strpos / strrpos), aber ned von einem string...

hätte nämlich gern, dass - ausgehend vom ersten vorkommen des suchbegriffes - in beide richtungen 300 zeichen dazugezählt werden und das ganze dann quasi als ausschnitt des ganzen artikels beim suchergebnis angezeigt wird.

noledge

CWNE #540
Avatar
Registered: Apr 2001
Location: ::1
Posts: 6837
$kette = "ein kleines beispiel fuer den flaimo";

$pos = strpos($kette, "den");

funktioniert ohne probleme...

liefert in dem fall 26 - bei 0 zu zählen beginnen und es passt.
Bearbeitet von noledge am 20.05.2002, 09:13

flaimo

ILFTKYS
Avatar
Registered: Dec 2001
Location: ask a ninja
Posts: 872
also das hab ich auch schon probiert und das geht leider nicht. das wort kommt zwar im text vor und wird dann beim suchergebnis angezeigt. als position bekomm ich aber mit strpos meist "0" obwohl das wort irgendwo mitten drunter vorkommt.

bernhard

Little Overclocker
Registered: Feb 2001
Location: NÖ
Posts: 51
Bitte Beispiele! Anmerkung: strpos() ist case sensitive.

Mir scheint, als möchstest Du ohnehin etwas Mächtigeres als strpos().

Vorschlag:

Code:
<?

  $haystick="Das ist ein langer Text. In ihm sind einige besondere Wörter verborgen, die ich mir gleich im Kontext anzeigen lassen werde.";
  $needle="kontext";
  $n=15;

  if(preg_match("/(.{0,".$n."})(".$needle.")(.{0,".$n."})/i",$haystick,$regs)) {;
    $cutout=$regs[1]."<span style=\"color : #f00;\">".$regs[2]."</span>".$regs[3];
    print("haystick: &quot;".$haystick."&quot;<br>\n");
    print("needle: &quot;".$needle."&quot;<br>\n");
    print("cutout: &quot;".$cutout."&quot;<br>\n");
  } else {
    print("no match for &quot;".$needle."&quot;!");
  }

?>

Natürlich sind hier noch leicht weitere Verbesserungen wie z.B. das Vermeiden von abgeschnitternen Wörtern möglich.

flaimo

ILFTKYS
Avatar
Registered: Dec 2001
Location: ask a ninja
Posts: 872
danke, hat sich bereits erledigt. hatte einen denkfehler im scriptablauf
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz