Archiv verlassen und diese Seite im Standarddesign anzeigen : Einfaches Beispiel für preg_match_all?
Hallo,
ich möchte mit PHP überprüfen ob eines oder mehrere Wörter in einer Webseite enthalten sind und wenn ja diese ausgeben.
Die Wörter werden wie folgt aufgelistet:
$word = array(
'Haus',
'Wohnung',
'Auto'
);
Und nun brächte ich Hilfe bei der Überprüfung mittels preg_match_all und die Ausgabe der gefundenen Wörtern in z.B. $ergebnis.
Könnte mir da jemand helfen? Ich wäre sehr dankbar!
Bitte<?php
$text = '
bla blub
bla Haus
Wohnung
Auto
bla Haus
Wohnung
Auto
';
$word = array(
'Haus',
'Wohnung',
'Auto'
);
$word = array_map('preg_quote', $word, array_fill ( 0, sizeof($word), '/'));
$regex = '/(' . implode('|', $word) .')/is';
preg_match_all($regex, $text, $matches);
$unique_matches=array_unique($matches[1]);
print_r ($unique_matches);
?>
Vielen Dank für deine Hilfe:
Ich habe es nun so eingebaut:
$word = array(
'SharePoint',
'Expression',
'Auto'
);
$text = $this->post['message'];
$word = array_map('preg_quote', $word, array_fill ( 0, sizeof($word), '/'));
$regex = '/(' . implode('|', $word) .')/is';
preg_match_all($regex, $text, $matches);
$unique_matches=array_unique($matches[1]);
print_r ($unique_matches);
Das ganze scheint auch der richtige Weg zu sein, allerdings hab ich noch folgendes Problem:
Im Header vor dem HTML Code schreibt er nun:
"Array ( [0] => SharePoint [1] => Expression [4] => sharepoint )"
Ich brauch vermutlich das Ergebniss in einer Verablen, damit ich es aus den Templates aufrufen kann.
Könntest du mir da bitte noch helfen? Danke!
Schau dir die Wirkungsweise von print_r() (http://www.php.net/print_r) genau an. Ich hab es nur zu Demozwecken so verwendet. ;) Ich dachte du kennst es.
Um eine Variable zu erzeugen, die man darstellen kann muß man das Array in einen String umwandeln. Dazu sollte sich implode() (http://de.php.net/implode) bestens eignen.
Beispiele:
// Durch Komma getrennt
$ausgabe = implode(', ', $unique_matches);
// zeilenweise
$ausgabe = implode("<br />\n", $unique_matches);
Oder du gehst das Array per foreach durch. ;)
Super! Danke!
Damit funktionierts! Bin leider nicht so der PHP-Profi!
Einen einzigen Schönheitsfehler habe ich noch. Wenn das Wort in leicht veränderter Form nochmals vorkommt - z.B. sowohl "SharePoint" als auch "Share-Point" oder "SharePoint's" dann wird der Begriff nochmals aufgelistet, klein und zusammengeschrieben, obwohl in "$word" nur der korrekte Begriff angeführt ist.
Kann man das noch irgendwie begrenzen, dass nur nach genauen Vorkommen gesucht wird oder liegt der Fehler wo anders? (Das ist nur eine Vermutung von mir, dass es daran liegen könnte)
Der Fehler bestand scheinbar auch schon im ersten Code, siehe:
Array ( [0] => SharePoint [1] => Expression [4] => sharepoint )
Dann änder mal folgende Zeile:
$regex = "/\b(" . implode('|', $word) .")\b/s";
Danke! Genau das ist es - Fehler beseitigt!
Vielen Dank :)
steffen.prd
26.02.2006, 01:06
www.infos24.de die php tutorials (die anderen auch :D) sind super und einfach erklärt hab mit deren tutorial über regular_expressions das ganze auch erst so richtig verstanden ;)
Gruß
vBulletin® v3.7.2, Copyright ©2000-2008, Jelsoft Enterprises Ltd.