我有一个数组
$array = array("ab","aab","abb","abab","abaab","abbb");
我想搜索包含重复连续字符(如aab
, )的元素abb
,abbb
并将它们替换为1
.
相反,如果一个元素不包含任何重复的连续字符(如ab
和abab
),那么它应该被替换为0
。
我有一个数组
$array = array("ab","aab","abb","abab","abaab","abbb");
我想搜索包含重复连续字符(如aab
, )的元素abb
,abbb
并将它们替换为1
.
相反,如果一个元素不包含任何重复的连续字符(如ab
和abab
),那么它应该被替换为0
。
preg_replace()
可以在一次调用中仅使用两个正则表达式模式来操作整个数组。首先将没有连续重复字符的字符串转换为0
. 然后将所有非0
值转换为1
.
代码:(有关该方法的更详细的分解,请参见演示链接)
$array=["ab","aab","abb","abab","abaab","abbb",'1','11','10','0','00100','1101','01'];
var_export(preg_replace(['/^(?:(.)(?!\1))*$/','/^(?!0$).*/'],[0,1],$array));
输出:
array (
0 => '0',
1 => '1',
2 => '1',
3 => '0',
4 => '1',
5 => '1',
6 => '0',
7 => '1',
8 => '0',
9 => '0',
10 => '1',
11 => '1',
12 => '0',
)
此方法使用 array_map 和 preg_match 根据重复字符串返回真/假匹配数组。键将匹配您的输入数组。
(.)
找到任何字符并将其放入第一个捕获组,然后\1
确保完全匹配的字符紧随其后。
$array = array("ab","aab","abb","abab","abaab","abbb");
function StringHasRepetition( $string )
{
return preg_match('/(.)\1/', $string);
}
$matches = array_map('StringHasRepetition',$array);
print_r( $matches );
// Array ( [0] => 0 [1] => 1 [2] => 1 [3] => 0 [4] => 1 [5] => 1 )
作为 Lambda 函数:
$array = array("ab","aab","abb","abab","abaab","abbb");
$matches = array_map( function( $string ){
return preg_match('/(.)\1/', $string);
} ,$array);
print_r( $matches );
// Array ( [0] => 0 [1] => 1 [2] => 1 [3] => 0 [4] => 1 [5] => 1 )