Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php preg_替换为重叠参数_Php_Regex - Fatal编程技术网

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