且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何检测和回声单词中的最后一个元音?

更新时间:2023-11-09 23:48:28

这是捕获字符串中最后一个元音的多字节安全版本.

Here's a multibyte safe version of catching the last vowel in a string.

$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;    
}

这是输出.

苹果" 中的最后一个元音是 e
茶" 中的最后一个元音是 a
"Strng" 中没有元音.
队列" 中的最后一个元音是 e
asartä" 中的最后一个元音是 ä
nő" 中的最后一个元音是 ő
ağır" 中的最后一个元音是 ı
NOËL" 中的最后一个元音是 Ë
gør" 中的最后一个元音是 ø
æsc" 中的最后一个元音是 æ

last vowel in "Apple" is e
last vowel in "Tea" is a
there's no vowel in "Strng".
last vowel in "queue" is e
last vowel in "asartä" is ä
last vowel in "nő" is ő
last vowel in "ağır" is ı
last vowel in "NOËL" is Ë
last vowel in "gør" is ø
last vowel in "æsc" is æ