preg_match_all来检查一个特殊的结构

时间:2013-06-10 23:12:23

标签: php preg-match

您好我想与preg_match_all核对一个字符串是否包含元音和辅音。 结构应为consonant|vowel|consonant|vowel

例如:

xaxa
xuxu
baba
nunu

2 个答案:

答案 0 :(得分: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';

答案 1 :(得分: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);