我试图修正一个用连字符分隔元音和后缀的脚本。
<?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);
?>
该脚本适用于元音,但是当我进入后缀时,它不会打印连字符。
输出: C-EL-EBR-AT-1-上-ING
我认为-i和-o都是元音的事实是什么让整个过程变得混乱。
如何识别所有六种模式,所有实例都超过-i和-o?
答案 0 :(得分:6)
您可以使用更简单的正则表达式:
preg_replace('/tion|[aeiou]/', "-$0", $string);
正则表达式首先尝试匹配tion
,从而阻止同一匹配中i
和o
的匹配。
答案 1 :(得分: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);
<强> OUPUT:强>
c-el-ebr-a-tion-ing