mai-jal-la ei ol-lut ko-ti-a ko-ko i-ka-naan nai-mi-sis-sa-kin o-li han ol-lut yh-ta ko-dit-to-man pie-tin kans-sa jo-ka nel-jan vuo-den pe-ras-ta kuol-les-saan jat-ti mai-jan kau-laan kak-si a-las-ton-ta ja tur-va-ton-ta las-ta

1. Konsonanttisääntö: Jos tavuun kuuluvaa vokaalia seuraa yksi tai useampia konsonantteja, joita vielä seuraa vokaali, tavuraja sijoittuu välittömästi ennen viimeistä konsonanttia.

2. Vokaalisääntö: Jos tavun ensimmäistä vokaalia seuraa toinen vokaali, niiden väliin tulee tavuraja, ellei
a) edellinen vokaali ole sama kuin jälkimmäinen (pitkä vokaali).
b) jälkimmäinen vokaali ole i (i:hin loppuva diftongi).
c) kysymyksessä ole jokin vokaalipareista au, eu, ie, iu, ou, uo, yö, äy, öy, ey tai iy (muu diftongi).

3. Diftongisääntö: Jos tavun kuuluvaa diftongia tai pitkää vokaalia seuraa vokaali, tähän väliin tulee aina tavuraja.

4. Poikkeussääntö: Yhdyssanat jaetaan tavuihin sanojen välistä, myös siinä tapauksessa, että sana on yhdyssana vain alkuperäiskielessä.

Koodi. Jos käytät, propsit mulle.
<?php
  
/**
  * tavuta sana
  * @param string $str - lause
  * @return array - two dimentional array
  */
  
function tavuta($str){
    
// first remove unwanted chars
    
$str str_replace(array("."",""!""\"""'"";""1""2""3""4""5""6""7""8""9""0"":"), ""$str);
    
$p explode(" "$str);
    for(
$k 0;$k <= count($p);$k++){
      
$sana trim($p[$k]);
      
$a tavut($sana);
      
$result[] = $a;
    }
    return 
$result;
  }
  
  
/**
  * return array
  */
  
function tavut($sana){
    
$kons = array("b""c""d""f""g""h""j""k""l""m""n""p""q""r""s""t""v""w""x""z");
    
$voka = array("a""e""i""o""u""y");
    
// diftongit
    
$dif = array("yi""ui""oi""ai""ay""au""yo""oy""uo""ou""ie""ei""eu""iu""ey""iy");

    
$sana trim($sana);
    
// utf stuff. a:ksi ja o:ksi
    
$sana str_replace(array("å""ä""ö""Å""Ä""Ö"), array("a""a""o""a""a""o"), $sana);
    
$loop strlen($sana);
    
    
// split the word
    
$w str_split(strtolower($sana));
    
$w[] = " "// helpers so we dont get notice's
    
$w[] = " ";
    
$w[] = " ";
    
$w[] = " ";

    
// put the word here letters and -'s
    
$com_word = array();
    for(
$i 0;$i $loop;){
      
$d 1// how many digits forward
      
if(in_array($w[$i], $kons)){
        if((
$i+1) >= $loop){ // if last is kons, remove the possible previous -
          
$last array_pop($com_word);
          if(
$last != "-"){
            
$com_word[] = $last;
          }
        }
        
$com_word[] = $w[$i];
      } else if(
in_array($w[$i], $voka)){
        
$com_word[] = $w[$i];
        if(
in_array($w[$i].$w[$i+1], $dif) || $w[$i] == $w[$i+1] || $w[$i+1] == "i"){ // next diftongi, same vokaali or "i" 
          
$com_word[] = $w[$i+1];
          
$d 2;
          if(
in_array($w[$i+2], $voka)){
            
$com_word[] = "-";
          } else if(
in_array($w[$i+2], $kons) && in_array($w[$i+3], $kons) && in_array($w[$i+4], $kons)){
            
$com_word[] = $w[$i+2];
            
$com_word[] = $w[$i+3];
            
$com_word[] = "-";
            
$d 4;
          } else if(
in_array($w[$i+2], $kons) && in_array($w[$i+3], $kons)){
            
$com_word[] = $w[$i+2];
            
$com_word[] = "-";
            
$d 3;
          } else if(
in_array($w[$i+2], $kons)){
            
$com_word[] = "-";
            
$d 2;
          }
        } else if(
in_array($w[$i+1], $voka)){
          
$com_word[] = "-";
          
$d 1;
        } else {
          if(
in_array($w[$i+1], $kons) && in_array($w[$i+2], $kons) && in_array($w[$i+3], $kons)){
            
$com_word[] = $w[$i+1];
            
$com_word[] = $w[$i+2];
            
$com_word[] = "-";
            
$d 3;
          } else if(
in_array($w[$i+1], $kons) && in_array($w[$i+2], $kons)){
            
$com_word[] = $w[$i+1];
            
$com_word[] = "-";
            
$d 2;
          } else if(
in_array($w[$i+1], $kons)){
            
$com_word[] = "-";
            
$d 1;
          }
        }
      }
      
$i $i $d;
    }
    
// now build the word back together
    
$tavut = array();
    
$tindex 0;
    foreach(
$com_word AS $in => $kirjain){
      if(
$kirjain == "-"){
        
$tindex++;
      } else if(isset(
$tavut[$tindex])){
        
$tavut[$tindex] .= $kirjain;
      } else {
        
$tavut[$tindex] = $kirjain;
      }
    }
    
    return 
$tavut;
  }
  
  
/**
  * return haiku 5-7-5
  * @param array $lause valmiiksi tavutettu lause (tämä tulee tavuta-funkkarista)
  * @param array $original sama ääkkösillä explode(" ", orig)
  * @return string haiku
  */
  
function isHaiku($lause$original){
    
// laske sanojen tavut tähän
    
$a = array();
    for(
$i 0;$i count($lause);$i++){
      
$a[] = count($lause[$i]);
    }
    
// onko haiku löytynyt
    
$found false;
    
// aloituspiste 
    
for($i 0;$i count($a);$i++){
      
// haiku tulokset
      
$result1 "";
      
$result2 "";
      
$result3 "";
      
// näiden countit pitää olla 5-7-5
      
$w1 = array();
      
$w2 = array();
      
$w3 = array();
      
// alkupisteestä etiäpäin
      
for($j $i;$j count($a);$j++){
        if(
array_sum($w1) < && isset($original[$j])){ // jos vähemmän kuin 5
          
$w1[] = $a[$j];
          
$result1 .= trim($original[$j])." ";
        } else if(
array_sum($w2) < && isset($original[$j])){ // jos vähemmän kuin 7
          
$result2 .= trim($original[$j])." ";
          
$w2[] = $a[$j];
        } else if(
array_sum($w3) < && isset($original[$j])){ // jos vähemmän kuin 5
          
$result3 .= trim($original[$j])." ";
          
$w3[] = $a[$j];
        } else if(
array_sum($w1) == && array_sum($w2) == && array_sum($w3) == 5){ // onko tulos haiku
          
$found true;
          
$i count($a);
          
$j count($a);
        } else { 
// nollaa tulos
          
$w1 = array();
          
$w2 = array();
          
$w3 = array();
        }
      }
    }
    
$result "";
    if(
$found){
      
$result $result1."/\n".$result2."/\n".$result3."";
      
// print '<pre>';
      // print_r ( $a );
      // print_r ( $w1 );
      // print_r ( $w2 );
      // print_r ( $w3 );
      // print '</pre>';
    
}
    return 
$result;
  }
?>