PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Grundlagen (http://www.selfphp.de/forum/forumdisplay.php?f=12)
-   -   kleines Verständnisproblem mit regulären Ausdrücken (http://www.selfphp.de/forum/showthread.php?t=18049)

bweichel 16.11.2007 09:50:35

kleines Verständnisproblem mit regulären Ausdrücken
 
Hi,

ich habe ein Suchwort und möchte nun die Textstelle an der das Wort gefunden wurde teilweisen ausgeben. Der Text soll hierbei ca. 10 Wörter (alternativ 1 Satz) vor dem gesuchten Wort anfangen bzw. 10 Wörter hinter dem gesuchten Wort wieder aufhören. Sodas ich dann eine schöne Textpassage mit dem gesuchten Wort ausgeben kann.

Ich habe nun mal eine regulären Ausdruck gebastelt der mir ganze Wörter zurückgibt. Momentan gibt er mir aber die kompletten Wörter des Contents aus. Es sollen natürlich nur 10 sein, also habe ich versucht mit {10} das ganze zu beschränken. Dann wird jedoch keine Übereinstimmung mehr gefunden.

Es ist also offensichtlich was falsch, aber wäre denn der Ansatz für mein o. g. Problem generell richtig oder habe ich da ein kompletter Denkfehler drin? Das Suchwort ist in meinem Ausdruck noch nicht berücksichtigt.

Code:

([a-zA-Z0-9]+\s)

cesca 16.11.2007 18:24:52

AW: kleines Verständnisproblem mit regulären Ausdrücken
 
Hallo,
ich sehe hier nicht das mit dem regex nach ganzen Wörtern gesucht wird.
Code:

[a-zA-Z0-9]+\s
Damit suchst du nach einem Zeichen vom Typ Buchstabe(klein u. groß) sowie vom Typ Zahl.
Mit dem "+" erkennt er eines der gerade gesuchten Zeichen einmal oder mehrmals und "s" erkennt Leerzeichen und Tabs und sowas aber keine Zeilenumbrüche.
Das heißt es wird Quasi alles gefunden was in einem normalen Satz steht.
Ich wüsste auch nicht wie mit einem regulären Ausdruck nach irgendwelchen Wörtern davor oder danach gesucht werden kann.

Wenn ich ein Wort suchen würde und davor und danach Text ausgeben will würde ich das vielleicht mit "preg_match" machen.
-die Position des Wortes im Suchtext feststellen
-die Position der gewünschten Zeichen vor und nach dem Suchwort feststellen
-alles ausschneiden
Beispielcode:
PHP-Code:

$davor 100;
$danach 100;
$string "dein Text";
$searchWord "findMich";
if (
preg_match("~$searchWord~i",$string)) {                          ##  ist Suchwort im String
  
$pos strpos(strtolower($string),$searchWord);                    ##  Position des Suchwortes im Text
  
$searchlen strlen($searchWord);                                  ##  Länge des Suchwortes feststellen
  
if($davor >= $pos) {                                               ##  ist Anzeige vor Fund größer oder gleich Fundposition...
    
$see substr($string,0,$danach+$davor+$searchlen);              ##  ...zeige von Anfang des Strings bis Anzeige nach Fund + Suchwortlänge
  
}else{                                                             ##  ist Anzeige vor Fund kleiner als Fundposition...
    
$see substr($string,$pos-$davor,$danach+$davor+$searchlen);    ##  ...zeige von Anzeige vor Fund bis Anzeige nach Fund + Suchwortlänge...
    
$see stristr($see," ");                                        ##  ...und verwerfe alles vor dem ersten Leerzeichen... (ganzen Wörtern)
    
$see "... ".$see;                                              ##  ...und setze Punkte davor
  
}
  if(
strlen(substr($string,$pos+$searchlen,$danach+$davor)) > $danach) { ##  ist Anzeige nach Fund kleiner als Reststringlänge
    
$see substr($see,0,strlen($see)-strlen(strrchr($see," ")));        ##  ...verwerfe alles nach dem letzten Leerzeichen...( ganzen Wörtern).
    
$see $see." ...";                                                  ##  ...und hänge Punkte hinten dran
  
}
}
echo 
$see



Alle Zeitangaben in WEZ +2. Es ist jetzt 22:26:45 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.