Php preg_替换为重叠参数
我试图纠正用连字符分隔元音和后缀的脚本Php preg_替换为重叠参数,php,regex,Php,Regex,我试图纠正用连字符分隔元音和后缀的脚本 <?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(); $replacemen
<?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-i-on-ing
我所想的是-i和-o都是元音,这一事实扰乱了整个过程
我如何允许识别所有六种模式,并让所有实例取代-I和-o?您可以使用更简单的正则表达式:
preg_replace('/tion|[aeiou]/', "-$0", $string);
正则表达式首先尝试匹配
tion
,从而防止以后在同一匹配中匹配i
和o
。不像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