2013-04-25 2 views
3

기본적으로 저는 PHP에서 정규 입력을 사용하지 않고 사용자 입력을 받아 PHP로 Piglatin으로 변환하는 아주 기본적인 프로그램을 작성하려고합니다. 단어가있는 경우, 단어 "이글루에서 (모음으로 시작하는 경우처럼 제외정규 표현식이없는 PHP의 Piglatin 프로그램?

<?php # script 
$original = $_REQUEST['original']; 
$array = explode(" ", $original); 

$piglatin = ""; 
foreach($array as $word) 
{ 
    $word = trim($word); 
    $first = substr($word,0,1); 
    $thsh = substr($word,1,2); 
    $thshrest = substr($word,2, strlen($word)-2); 
    $rest = substr($word,1,strlen($word)-1); 

    if(trim($word)) 
    { 
     $piglatin .= (strlen($word)==1)?$first." ":$rest.$first. "ay "; 
    } 
} 

echo $original ." becomes: ".$piglatin; 
?> 

이 계정에 특별한 경우를 고려하지 않습니다 : 이것은 내 코드는 지금까지 괜찮있는 모습입니다 "예 :"iglooway "로 인쇄해야 함) 또는"th "또는"sh "로 시작하는 경우 (이 경우"thimble "이라는 단어는"imblethay "로 인쇄되어야하며 처음 두 글자는) 첫 번째 문자열 대신에 끝까지 가져옵니다.

"th"및 "sh"로 시작하는 문자열 ($ thsh 및 $ thshrest 참조)에서 변수를 만드는 프로세스가 이미 시작되었습니다. 그러나 나는 여기서 내가 어디로 가야하는지에 관해 정말로 혼란 스럽다.

+1

왜 정규 표현식에 사용할 의향이없는 ? – silkfire

답변

0

정규식 솔루션 (아마 당신이 원하는,하지만 난 그게 얼마나 쉽게 표시 할 수 없습니다 것을) :

$pig_latin = preg_replace('#^([^aeiou]+)([aeiou]+)(.*)#', '$2$3$1ay', $original); 
$pig_latin = preg_replace('#(^[aeiou].*)#', '$1way', $pig_latin); 
0

방법에 대해 :

foreach ($array as $word) { 
    if (preg_match('/^[aeiou]/', $word)) { 
     $word = preg_replace('/^([aeiou].+)$/', "$1way", $word); 
    } else { 
     $word = preg_replace('/^(th|sh)(.+)$/', "$2$1ay", $word); 
    } 
    $piglatin .= $word ." "; 
}