Michael: RegEx zweiwort Kombinationen

Hallo, na wie gehts der lieben Community so?

Ich habe mal wieder eine kleine Frage, ich bin auf der Suche nachen einem regex der mir alle zweiwort Kombinationen aus einem String liefert.

Ich habs auch schon selbst probiert, soweit bin ich:

$text = 'eins zwei drei';

preg_match_all('#(\S+\s{1}\S+)#ism', $text, $arr_text);

Da gibt es nur ein kleines Problem. Als Ergebnis erhalte ich ein Array mit:

'eins zwei'

Ich möchte aber auch 'zwei drei'

Das Ergebniss soll dann ein Array mit zwei und nicht einem Element sein. Die Elemente sollen also sein: 'eins zwei' und 'zwei drei'.

Kann mir da jemand von euch weiter helfen?

Danke.

Michi

  1. hi,

    Da gibt es nur ein kleines Problem. Als Ergebnis erhalte ich ein Array mit:
    'eins zwei'
    Ich möchte aber auch 'zwei drei'

    Dann müsste der RegEx ja von einem Treffer aus wieder "nach hinten" schauen - ich weiss nicht, ob das trivial umsetzbar ist.

    Wäre es da nicht vielleicht sinnvoller, einfach nur zu splitten, so dass du ein Array mit Einzelworten erhältst - und dann beim Durchlaufen dieses Arrays jeweils Element i und Element i+1 zusammen zu betrachten ...?

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Wäre es da nicht vielleicht sinnvoller, einfach nur zu splitten, so dass du ein Array mit Einzelworten erhältst - und dann beim Durchlaufen dieses Arrays jeweils Element i und Element i+1 zusammen zu betrachten ...?

      gruß,
      wahsaga

      Okay, das ist mal eine gute Idee, manchmal fixiere ich mich zu sehr auf einen Lösungsweg. Danke.

    2. gudn tach!

      Da gibt es nur ein kleines Problem. Als Ergebnis erhalte ich ein Array mit:
      'eins zwei'
      Ich möchte aber auch 'zwei drei'

      Dann müsste der RegEx ja von einem Treffer aus wieder "nach hinten" schauen - ich weiss nicht, ob das trivial umsetzbar ist.

      <?php  
      $text = 'eins zwei drei vier fuenf';  
      preg_match_all('#(\b[a-z]+)(?=(\s[a-z]+\b))#ism', $text, $arr_text);  
      // bloss zur anzeige:  
      for($i=count($arr_text[1]); $i>=0; --$i)  
       echo $arr_text[1][$i],$arr_text[2][$i],"\n";  
      ?>
      

      Wäre es da nicht vielleicht sinnvoller, einfach nur zu splitten, so dass du ein Array mit Einzelworten erhältst - und dann beim Durchlaufen dieses Arrays jeweils Element i und Element i+1 zusammen zu betrachten ...?

      u.u. ist beim splitten dennoch wieder den einsatz von regexp von vorteil:
      also sowas wie
        preg_split('/\b\s\b/', $str);
      oder
        preg_split('/(?<=[a-z])\s(?=[a-z])/', $str);

      z.b. falls in "eins zwei, drei" das komma den fund "zwei drei" verhindern soll.

      prost
      seth