基本上我正在尝试用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”),或者如果它以“iglooway”开头th“或”sh“(在这种情况下,例如”thimble“这个词应打印为”imblethay“,取前两个字母并将它们带到最后而不是仅仅是第一个字母。)
我已经开始用以“th”和“sh”开头的字符串创建变量的过程(参见$ thsh和$ thshrest),但是我真的很困惑我应该从哪里开始?
答案 0 :(得分:0)
正则表达式解决方案(可能不是你想要的,但我想表明它是多么容易):
$pig_latin = preg_replace('#^([^aeiou]+)([aeiou]+)(.*)#', '$2$3$1ay', $original);
$pig_latin = preg_replace('#(^[aeiou].*)#', '$1way', $pig_latin);
答案 1 :(得分: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 ." ";
}