php用一位替换连续的相同多个数字

时间:2018-10-15 05:57:43

标签: php regex replace

我想用一位数字代替连续的4个或更多相同的数字。 如1111 => 1。 我尝试使用正则表达式作为

sudo systemctl restart mysql

但不能替代。 请给我建议。谢谢。

3 个答案:

答案 0 :(得分:0)

尝试使用正则表达式$.each($("#detailsTable tbody tr"), function () { QuotationArr.push({ Srno: $(this).find('td:eq(0)').html(), PartyName: $(this).find('td:eq(1)').html(), imageFile: $(this).find('td:eq(2)').html(), IsMature: $(this).find('td:eq(3)').html() }); }); 并替换为{% include "template.twig" with { 'variable2' : variable1.variable2, } %}

这将匹配连续出现四次或更多次的数字

Regex

答案 1 :(得分:0)

使用图案

/(\d)\1{3,}/

匹配一个组中的一个数字,然后重复同一组3次或更多次,然后用匹配的数字字符替换整个匹配的子字符串:

$1

完整代码:

$str = "1111 2222 3333 4444 asdfasf 1111 2222 ";
echo preg_replace('/(\d)\1{3,}/', "$1", $str);

输出:

1 2 3 4 asdfasf 1 2

这还将匹配其他数字中的重复数字,例如122221-如果您不希望这样做,则在开头和结尾处添加单词边界:

/\b(\d)\1{3,}\b/

答案 2 :(得分:0)

您也可以这样进行操作(其他答案具有这种方法的效率更高)。但我想为什么不发布一些不同的内容...

$str = "1111 2222 3333 4444 asdfasf 1111 2222 ";

$range = range(0,9);
$patterns = array_map(function($num){
    return '/'.$num.'{4,}/';
},$range);

echo preg_replace($patterns, $range, $str);

输出:

1 2 3 4 asdfasf 1 2 

Sandbox

此模式基本上使用/x{4,}/,其中x是数字0-9。因此,这使用一组模式替换为一组替换。这就是为什么效率较低,但他们击败了我的另一个答案。...

现在我考虑了,也可以像这样\1来完成

$str = "1111 2222 3333 4444 asdfasf 1111 2222 ";

$patterns = array_map(function($num){
    return '/('.$num.'){4,}/';
},range(0,9));

echo preg_replace($patterns, '\1', $str);

这样,它仅使用1个数组...

Sandbox

模式阵列看起来像这样

[
  0 => '/(0){4,}/',
  1 => '/(1){4,}/',
  2 => '/(2){4,}/',
  3 => '/(3){4,}/',
  4 => '/(4){4,}/',
  5 => '/(5){4,}/',
  6 => '/(6){4,}/',
  7 => '/(7){4,}/',
  8 => '/(8){4,}/',
  9 => '/(9){4,}/',
]

干杯!