0

嗨,我想检查preg_match_all一个字符串是否由元音和辅音组成。结构应为consonant|vowel|consonant|vowel.

例如:

xaxa
xuxu
baba
nunu
4

2 回答 2

1

这有点棘手,因为虽然我的第一直觉是匹配元音,然后是非元音,但它也匹配其他所有内容。然后在英语中有一些规则,y有时是元音。

这应该能让你到达那里。

$string = "xaxa xuxu baba nunu nnnn";
$vowels = 'aeiouy';
$consonants = 'bcdfghjklmnpqrstvwxyz';
$pattern = "!([$consonants][$vowels][$consonants][$vowels])!i";
$found = preg_match_all($pattern,$string,$matches);

foreach ($matches[0] as $value){
    echo $value."<br />";
}

关于英语的奇怪之处在于这也会匹配yyyy。如果您不希望将y其视为元音,则可以将其从组中删除。

$vowels = 'aeiou';
于 2013-06-10T23:18:13.430 回答
0

此脚本检查每个单词的交替元音/辅音并返回它们:

$subject = <<<LOD
abacagopa
titot
blux
apocop
pipo
laek
LOD;

$pattern = '~
# definitions
(?(DEFINE)(?<vowel>[aeiou]))
(?(DEFINE)(?<consonant>[bcdfghjklmnpqrstvwyz]))

# pattern
\b\g<vowel>?+(?>\g<consonant>\g<vowel>)*+\g<consonant>?+\b

~ix';

echo preg_replace($pattern, '$0<br/>', $subject);
于 2013-06-10T23:39:14.307 回答