2

母音と接尾辞をハイフンで区切るスクリプトを修正しようとしています。

<?php
$string = 'celebrationing';
$patterns = array();
$patterns[0] = '/a/';
$patterns[1] = '/e/';
$patterns[2] = '/i/';
$patterns[3] = '/o/';
$patterns[4] = '/u/';
$patterns[5] = '/tion/';

$replacements = array();
$replacements[0] = '-a';
$replacements[1] = '-e';
$replacements[2] = '-i';
$replacements[3] = '-o';
$replacements[4] = '-u';
$replacements[5] = '-tion';

echo preg_replace($patterns, $replacements, $string);


?>

スクリプトは母音に対しては正常に機能しますが、接尾辞 -tion になると、ハイフンが出力されません。

出力: c-el-ebr-at-i-on-ing

私が考えているのは、-i と -o の両方が母音であるという事実が、プロセス全体をめちゃくちゃにしているということです。

-tion のすべてのインスタンスが -i および -o に取って代わり、6 つのパターンすべてが認識されるようにするにはどうすればよいですか?

4

2 に答える 2

2

Jerry のソリューションほどエレガントではありませんが、これは否定先読みと後読みを使用しています。

<?php

$string = 'celebrationing';
$patterns = array();
$patterns[0] = '/a/';
$patterns[1] = '/e/';
$patterns[2] = '/i(?!on)/';
$patterns[3] = '/o(?<!ti)(?!n)/';
$patterns[4] = '/u/';
$patterns[5] = '/tion/';

$replacements = array();
$replacements[0] = '-a';
$replacements[1] = '-e';
$replacements[2] = '-i';
$replacements[3] = '-o';
$replacements[4] = '-u';
$replacements[5] = '-tion';

echo preg_replace($patterns, $replacements, $string);

出力:

c-el-ebr-a-tion-ing
于 2013-10-28T18:41:24.217 に答える