用数字替换字符


Replacing char with number

我正在做

示例此值的字符串

z12z

我想生成

0120
0121
0122
... until 0129

然后

1120
1121
1122
... until 1129

直到9129年,它有点像2-4循环,但我不知道如何实现它。

问题是z可以在任何地方,也可以是zzzz

的位置

0000 until 9999

或者它也可以是z0z0,z可以在任何地方。我应该用什么样的方法来做这件事。

谢谢

我用php 做这件事

对于字母"z"的每次出现,我都需要进行for循环来生成可能的数字,从0到9,你可以说z是0到9的for循环,例如z555将产生0555155525553555455556555755585559555,问题是z可能出现0到4的可能性,如z555、zz55、zzz5、zzzz,并且z位置是随机的,我需要生成可能的z数字输出

z位置可以是55z5、5z55、5zz5。它没有固定的位置。

<?php
$numbers = array();
for ($i = 0; $i <= 9; $i++){
    for ($j = 120; $j <= 129; $j++){
        $numbers[] = $i . $j;
    }
}
print_r('<pre>');
print_r($numbers);

采用z字符的更好答案是:

<?php
function strReplaceNth($search, $replace, $subject, $nth)
{
    $found = preg_match_all('/' . preg_quote($search) . '/', $subject, $matches, PREG_OFFSET_CAPTURE);
    if (false !== $found && $found > $nth) {
        return substr_replace($subject, $replace, $matches[0][$nth][1], strlen($search));
    }
    return $subject;
}
function cleanup($numbers, $char)
{
    $tmp = array();
    for ($i = 0; $i < count($numbers); $i++){
        if (strpos($numbers[$i], $char) === false){
            $tmp[] = $numbers[$i];
        }
    }
    return $tmp;
}
function generateNumber($numbers, $char)
{
    if (!is_array($numbers)){
        if (strpos($numbers, $char) === false){
            return array($numbers);
        } else {
            $tmp = $numbers;
            $numbers = array();
            for ($j = 0; $j <= 9; $j++){
                $numbers[] = strReplaceNth($char, $j, $tmp, 0);
            }
            return generateNumber($numbers, $char);
        }
    } else {
        for ($i = 0; $i < count($numbers); $i++){
            if (strpos($numbers[$i], $char) === false){
                return cleanup($numbers, $char);
            } else {
                $numbers = array_merge($numbers, generateNumber($numbers[$i], $char));
            }
        }
        return generateNumber($numbers, $char);
    }
}
function getCharPos($string, $char)
{
    $pos = array();
    for ($i = 0; $i < strlen($string); $i++){
        if (substr($string, $i, 1) == $char){
            $pos[] = $i;
        }
    }
    return $pos;
}
$string = 'z12z';
$char = 'z';
$occurences = getCharPos($string, $char);
$numbers = array();
if (count($occurences) > 0){
    $numbers = generateNumber($string, $char);
} else {
    $numbers[] = $string;
}
print_r('<pre>');
print_r($numbers);die();