Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.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 如何用另一个字符替换同一个字符的两个或多个出现的字符?_Php_String - Fatal编程技术网

Php 如何用另一个字符替换同一个字符的两个或多个出现的字符?

Php 如何用另一个字符替换同一个字符的两个或多个出现的字符?,php,string,Php,String,我正在尝试编写一段PHP代码,用该字符的一次出现替换字符串中多个相邻出现的字符 例如: my-string--is---dashed 应成为: my-string-is-dashed 使用regexp: var_dump(preg_replace('/-{2,}/', '-', 'my-string--is---dashed')); // string(19) "my-string-is-dashed" 如果你指的是任何重复的字符,它就有点复杂了: var_dump(preg_replac

我正在尝试编写一段PHP代码,用该字符的一次出现替换字符串中多个相邻出现的字符

例如:

my-string--is---dashed
应成为:

my-string-is-dashed
使用regexp:

var_dump(preg_replace('/-{2,}/', '-', 'my-string--is---dashed')); // string(19) "my-string-is-dashed"
如果你指的是任何重复的字符,它就有点复杂了:

var_dump(preg_replace('/(.)(\\1)+/', '$1', 'tttooosssdihfjkkk')); string(9) "tosdihfjk"
其中
\\1
基本上是匹配的字符(由
(..
)匹配)。

尝试以下操作:

$new_string = preg_replace('/-{2,}/', '-', $string);

最简单的解决方案是使用正则表达式替换

$output = preg_replace('/-+/', '-', $input);
实际上,为了限制真空替换,您可以选择以下选项:

$output = preg_replace('/-{2,}/', '-', $input);

它也有效。但这将替换为1行或多行,而不是2行或多行(即
{2,}
而不是
+
)。为了澄清这一点,netcoder指的是我的代码的第一行(在编辑之前,我引入了第二行)。然而,据我所知,
preg_replace
起作用的方式是,两者之间没有明显的性能差异,因为
preg_replace
无论如何都会实例化一个新字符串,从源字符串或替换字符串中提取字符。
str_replace("--", "-", $mystring);