Php 从字符串中删除某些字符的重复项
如果数组Php 从字符串中删除某些字符的重复项,php,Php,如果数组$a中的重复字符彼此相邻,如何从字符串$b中删除它们 $a = array("a","b","c"); $b = "aabcccdef"; 输出应该是 abcdef 可以用正则表达式找到字符,但我不知道如何检测字符是否相邻 preg_replace( array('/a+/','/b+/','/c+/'),array('a','b','c',), $b ); 另一种更为复杂的方式可能是: preg_replace_callback('/(\w+)/', function ($mat
$a
中的重复字符彼此相邻,如何从字符串$b
中删除它们
$a = array("a","b","c");
$b = "aabcccdef";
输出应该是
abcdef
可以用正则表达式找到字符,但我不知道如何检测字符是否相邻
preg_replace( array('/a+/','/b+/','/c+/'),array('a','b','c',), $b );
另一种更为复杂的方式可能是:
preg_replace_callback('/(\w+)/', function ($matches) use ($a) {
if ( in_array($matches[1][0],$a) ) //> if you need UTF-8 working use mb_substr here
return $matches[1][0];
},$b);
//> both untested
另一种方法,旧方法(在几个字符的字符串上可能会快一点):
$c='';
$cache=false;
对于($i=0;$i)
另一种更为复杂的方式可能是:
preg_replace_callback('/(\w+)/', function ($matches) use ($a) {
if ( in_array($matches[1][0],$a) ) //> if you need UTF-8 working use mb_substr here
return $matches[1][0];
},$b);
//> both untested
另一种方法,旧方法(在几个字符的字符串上可能会快一点):
$c='';
$cache=false;
对于($i=0;$i另一种方式:
$expression = join('|', $a);
$b = preg_replace('/(' . $expression . ')\1+/', '$1', $b);
说明:
生成的表达式看起来像(a | b)\1+/code>,其中a | b
匹配a
或b
\1
匹配第一个捕获组所匹配的任何内容(a | b)
。这就是如何匹配一组重复字符的方法。然后,匹配的字符将被捕获组的内容替换($1
)
这不仅适用于单个字符,而且适用于任何子字符串
如果字符串可以包含特殊的正则表达式字符,您应该首先(array\u map('preg\u quote',$a)
应该可以正常工作)。另一种方法:
$expression = join('|', $a);
$b = preg_replace('/(' . $expression . ')\1+/', '$1', $b);
说明:
生成的表达式看起来像(a | b)\1+/code>,其中a | b
匹配a
或b
\1
匹配第一个捕获组所匹配的任何内容(a | b)
。这就是如何匹配一组重复字符的方法。然后,匹配的字符将被捕获组的内容替换($1
)
这不仅适用于单个字符,而且适用于任何子字符串
如果字符串可以包含特殊的正则表达式字符,那么首先(array\u map('preg\u quote',$a)
应该可以正常工作).太棒了,尽管我不得不承认我对第一个数组有点困惑。要创建第一个数组,你可以做一个foreach并向每个值添加/+//或者只使用第二个选项。太棒了,尽管我不得不承认我对第一个数组有点困惑。要创建第一个数组,你可以做一个foreach并向每个值添加/+/+//或者只使用第二种选择