Thema: Ganze Wörter ausschließen

Wie kann ich unter PHP mit preg_match ganz Wörter/Begriffe ausschließen, d.h. "suchwort" soll in "suchwort bla bla bla" nur dann gefunden werden, wenn bla bla bla ein bestimmtes wort _nicht_ enthält.

Danke & Gruß
-timo-

2

Re: Ganze Wörter ausschließen

Hi und willkommen auf Devshare!

Meinst Du zufällig sowas:

 <PRE>
 <?
 
 $worte[] = "Zuhause";
 $worte[] = "Zuschlagen";
 $worte[] = "Zumüllen";
 
 print_r($worte);
 
 foreach ( $worte as $wort )
 {
   if ( !preg_match("/haus/",$wort) )
   {
       print "$wort enthält "haus" nicht!<BR>";
   }
 
 }
 
 
 ?>
 </PRE>
 

HTH, tink

Beleidigungen sind die Argumente derer, die keine Argumente haben

Re: Ganze Wörter ausschließen

Hallo & Danke für den Reply, aber das meinte ich nicht. Es geht nicht darum, ob ein String ein bestimmtes Wort überhaupt enthält, sondern es geht um Position und reihenfolge. Ich könnte es auch so beschreiben:

Ich suche z.B. in einem Text Solche Sätze, die mit Wort X beginnen und mit Wort Y enden, aber - zwischen diesen Wörtern - das Wort Z nicht enthalten. Ich weiß, dass ich z.B. mit [^<]* alle Charaktere außer < beschreibe. Genauso würde ich eben alle Charaktere außer einem bestimmten Wort zulassen, aber mit ^lassen sich nur Charaktere, aber nicht Word Boundaries beschreiben.

Ach ja: ich könnte natürlich in zwei Schritten vorgehen: erst die Sätze heraussuchen und dann prüfen, ob das Wort enthalten ist, aber genau das will ich nicht, sondern es soll in einem Schritt geschehen, da ich nur so später auch mit suchen & Ersetzen arbeiten kann.

4

Re: Ganze Wörter ausschließen

Moinmoin,

gegeben sei folgender string:


 $q = 'WortX trallala WortZ hoppsassa WortY
             WortX WortXWortY  WortX WortW WortY
           WortXWortY   balooba
         WortX   WortY
               WortXWortZWortY
                 WortX WortZWortY
         WortXWortZ WortY
                     WortX WortXWortY WortXWortQWortYWortY
        WortZWortY
        WortXWortXWortYWortY';
 

jetzt ganz schnell - Welche matching-sets sind gleich ? :


             [0] => WortXWortY
             [1] => WortX WortW WortY
             [2] => WortXWortY
             [3] => WortX   WortY
             [4] => WortXWortY
             [5] => WortXWortQWortYWortY
             [6] => WortXWortXWortYWortY
 
             [0] => WortXWortY
             [1] => WortX WortW WortY
             [2] => WortXWortY
             [3] => WortX   WortY
             [4] => WortXWortY
             [5] => WortXWortQWortYWortY
             [6] => WortXWortYWortY
 
             [0] => WortX WortXWortY
             [1] => WortX WortW WortY
             [2] => WortXWortY
             [3] => WortX   WortY
             [4] => WortX WortXWortY
             [5] => WortXWortQWortYWortY
             [6] => WortXWortXWortYWortY
 
             [0] => WortXWortY
             [1] => WortX WortW WortY
             [2] => WortXWortY
             [3] => WortX   WortY
             [4] => WortXWortY
             [5] => WortXWortQWortY
             [6] => WortXWortXWortY
 
             [0] => WortXWortY
             [1] => WortX WortW WortY
             [2] => WortXWortY
             [3] => WortX   WortY
             [4] => WortXWortY
             [5] => WortXWortQWortY
             [6] => WortXWortY
 
             [0] => WortX WortXWortY
             [1] => WortX WortW WortY
             [2] => WortXWortY
             [3] => WortX   WortY
             [4] => WortX WortXWortY
             [5] => WortXWortQWortY
             [6] => WortXWortXWortY
 

Erraten ? Bestimmt, also 5 Mark ins Schweinderl.


 <?
 
 $q = 'WortX trallala WortZ hoppsassa WortY
             WortX WortXWortY  WortX WortW WortY
           WortXWortY   balooba
         WortX   WortY
               WortXWortZWortY
                 WortX WortZWortY
         WortXWortZ WortY
                     WortX WortXWortY WortXWortQWortYWortY
        WortZWortY
        WortXWortXWortYWortY';
 
 preg_match_all('/WortX(?!WortZ)(?:(?:.(?!Wort[XZ]))*|s*)WortY/s', $q, $m);
 //preg_match_all('/WortX(?!Wort[XZ])(?:(?:.(?!Wort[XZ]))*|s*)WortY/s', $q, $m);
 //preg_match_all('/(?:WortXs*)+(?!WortZ)(?:(?:.(?!Wort[XZ]))*|s*)WortY/s', $q, $m);
 
 //preg_match_all('/WortX(?!WortZ)(?:(?:.(?!Wort[XZ]))*|s*)WortY/Us', $q, $m);
 //preg_match_all('/WortX(?!Wort[XZ])(?:(?:.(?!Wort[XZ]))*|s*)WortY/Us', $q, $m);
 //preg_match_all('/(?:WortXs*)+(?!WortZ)(?:(?:.(?!Wort[XZ]))*|s*)WortY/Us', $q, $m);
 
 print '<pre>';
 print_r($m);
 print '</pre>';
 
 ?>
 

gruß

matho