-2
$word = "Acrobat" (or Apple, Tea etc.)

特定の単語の最後の母音をphpで検出してエコーするにはどうすればよいですか? 何時間もグーグル検索した preg_match 関数を試しましたが、適切な解決策が見つかりませんでした。

文字列には、ü、ö などのマルチバイト文字を含めることができます。

4

6 に答える 6

5

これは、文字列の最後の母音をキャッチするマルチバイト セーフ バージョンです。

$arr = array(
    'Apple','Tea','Strng','queue',
    'asartä','nő','ağır','NOËL','gør','æsc'
);

/*  these are the ones I found in character viewer
    in Mac so these vowels can be extended. don't
    forget to add both lower and upper case versions
    of new ones because personally I wouldn't rely
    on the i (case insensitive) flag in the pattern
    for multibyte characters.
*/
$vowels =
    'aàáâãāăȧäảåǎȁąạḁẚầấẫẩằắẵẳǡǟǻậặæǽǣ' .
    'AÀÁÂÃĀĂȦÄẢÅǍȀȂĄẠḀẦẤẪẨẰẮẴẲǠǞǺẬẶÆǼǢ' .
    'EÈÉÊẼĒĔĖËẺĚȄȆẸȨĘḘḚỀẾỄỂḔḖỆḜ' .
    'eèéêẽēĕėëẻěȅȇẹȩęḙḛềếễểḕḗệḝ' .
    'IÌÍÎĨĪĬİÏỈǏỊĮȈȊḬḮ' .
    'iìíîĩīĭıïỉǐịįȉȋḭḯ' .
    'OÒÓÔÕŌŎȮÖỎŐǑȌȎƠǪỌØỒỐỖỔȰȪȬṌṐṒỜỚỠỞỢǬỘǾŒ' .
    'oòóôõōŏȯöỏőǒȍȏơǫọøồốỗổȱȫȭṍṏṑṓờớỡởợǭộǿœ' .
    'UÙÚÛŨŪŬÜỦŮŰǓȔȖƯỤṲŲṶṴṸṺǛǗǕǙỪỨỮỬỰ' .
    'uùúûũūŭüủůűǔȕȗưụṳųṷṵṹṻǖǜǘǖǚừứữửự'
;

// set necessary encodings
mb_internal_encoding('UTF-8');
mb_regex_encoding('UTF-8');

// and loop
foreach ($arr as $word) {

    $vow = mb_ereg_replace('[^'.$vowels.']','',$word);
    // get rid of all consonants (non-vowels in this pattern)
    $lastVw = mb_substr($vow,-1);
    // and get the last one from the remaining vowels

    if (empty($lastVw))
    // it evaluates this line when there's no vowel in the string
        echo "there's no vowel in <b>\"$word\"</b>." . PHP_EOL;
    else
    // and vice versa
        echo "last vowel in <b>\"$word\"</b> is " .
        "<span style=\"color:#F00\">{$lastVw}</span>" . PHP_EOL;    
}

これが出力です。

"Apple"の最後の母音"Tea"
の最後の母音ですが "Strng"には母音は ありません。"queue"の 最後 の母音はe "asartä" の最後の母音はä "nő" の最後の母音はő "ağır" の最後の母音はı "NOËL" の最後の母音はË "gør"最後の母音はø 最後の母音"æsc"æ








于 2013-01-11T00:58:41.327 に答える
2
$word = "Acrobat";
$vowels = array_intersect(str_split($word), array('A','E','I','O','U','a','e','i','o','u'));
echo array_pop($vowels);
于 2013-01-10T23:21:45.203 に答える
1
function last_vowel($word) {
  for ($i = strlen($word) - 1; $i >= 0; --$i) {
      switch (strtolower($word[$i])) {
        case 'a': case 'e': case 'i': case 'o': case 'u': case 'y':
          return $word[$i];
      }
  }
  return null;
}

echo last_vowel("Apple");
于 2013-01-10T23:16:34.153 に答える
0

メソッドstr_split()を使用します

http://www.php.net/manual/en/function.str-split.php

これにより、文字列が配列に変換され、配列のインデックスを使用して文字列の最初と最後の文字を見つけることができます。

-配列[0]は最初の文字です*配列[文字の総数-1]は最後の文字です。

配列の最初と最後の要素を取得した後、マッピングが開始されます。例:if(letter == "a" || letter == "A")echo "Apple";

等々...

于 2013-01-10T23:16:21.540 に答える
0

エドまたはマークの答えは間違いなくより効率的だと思いますが、再帰関数の例が必要な場合は次のとおりです。

$word = "stellar";

function lastVowel($word)
{
    $vowels = array('a','e','i','o','u');
    $letter = substr($word, strlen($word) - 1);
    if(in_array(strtolower($letter), $vowels))
        return $letter;
    else
    {
        if(strlen($word) > 0)
            return lastVowel(substr($word, 0, strlen($word) - 1));
        else
            return "no vowels";
    }
}

echo lastVowel($word);

これを行うためのより良い方法があります。必ずしも「最良」のものではなく、特定の例を挙げているだけです。

于 2013-01-10T23:21:57.763 に答える
0

私は個人的preg_match()にこのタスクに使用します。

$arr = array(
    'Apple','Tea','Strng','queue'
);

foreach ($arr as $word) {

    preg_match('~[aeiou](?=[^aeiou]*$)~i',$word,$m);

    if (empty($m)) echo "there's no vowel in \"$word\".";
    else echo "last vowel in \"$word\" is <b style=\"color:#F00\">{$m[0]}</b>";
    echo PHP_EOL;   
}

これは出力されます

"Apple"の最後の母音
は "Tea" の最後の母音ですが
"Strng" には母音がありません。
"queue" の最後の母音はeです

于 2013-01-10T23:27:09.733 に答える