不带正则表达式的PHP Piglatin程序


Piglatin program in PHP without regular expressions?

基本上,我试图在PHP中编写一个非常基本的程序,只是接受用户输入并将其转换为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;
?>

但它没有考虑到特殊情况,比如一个单词以元音开头(在这种情况下,单词"igloo"应该打印为"iglooway"),或者如果它以"th"或"sh"开头(在这种情况下,单词"顶帽"应该打印为"imblethay",将前两个字母放在末尾,而不是只放在第一个字母)

我已经开始从以"th"answers"sh"开头的字符串中创建变量的过程(参见$thsh和$thshrest),但是我真的很困惑,我应该从这里去哪里?

一个正则表达式解决方案(可能不是您想要的,但我想展示它是多么容易):

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

如何:

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 ." ";
}