Php 如何找到字符串中每个数字的位置?

Php 如何找到字符串中每个数字的位置?,php,regex,string,Php,Regex,String,我有一个字符串,例如: 12abc3def4 如何使用正则表达式获取该字符串中每个单个数字的位置 预期产出: Digit: Position "1": 0 "2": 1 "3": 5 "4": 9 编辑: 所以有人告诉我,用regex找不到这个职位。现在我需要找到字符串中的数字,然后查找它们的位置。问题是我使用的是以下正则表达式: preg_match('/[\d*]/', "12abc3def4", $output) 一个数字可能出现多次,也可能从未出现过。字符串也可能没有任何数字 但

我有一个字符串,例如:

12abc3def4
如何使用正则表达式获取该字符串中每个单个数字的位置

预期产出:

Digit: Position
"1": 0
"2": 1
"3": 5
"4": 9
编辑:

所以有人告诉我,用regex找不到这个职位。现在我需要找到字符串中的数字,然后查找它们的位置。问题是我使用的是以下正则表达式:

preg_match('/[\d*]/', "12abc3def4", $output) 
一个数字可能出现多次,也可能从未出现过。字符串也可能没有任何数字

但它只给了我第一个数字,即1,然后停在那里。

您可以使用flag PREG\u OFFSET\u CAPTURE

\d匹配一个数字[0-9];看


您可以使用将字符串拆分为一个数组,并使用进行筛选

保留指示每个字符位置的原始数组索引:

$str='12abc3def4'; $filtered=array_filterstr_split$str,函数$ch{ 返回ctype_digit$ch;//仅为'integer'返回'true' }; 打印\u r$已过滤; 收益率:

Array
(
    [0] => 1
    [1] => 2
    [5] => 3
    [9] => 4
)
为了更好地反映示例输出,只需var_dumparray_flip$filtered;:

希望这有帮助:

既然可以,只需简单地循环字符串,如果是数字,则打印位置,例如

<?php

    $str = "12abc3def4";

    echo "Digit | Position<br>";
    for($i = 0, $length = strlen($str); $i < $length; $i++) {
        if(is_numeric($str[$i]))
            echo $i . " | " . $str[$i] . "<br>";
    }

?>

1.正则表达式在这方面做得太过分了:一个简单的字符串索引方法会更好。2.你试过什么?我认为正则表达式是解决这些问题的最好办法。我希望这样做:preg_match'/[\d*]/',12abc3def4,$output,但输出只显示第一位数字1,忽略其余数字。更不用说我不知道它是否能给我这个职位。@Lamar在你的问题中添加^^这个代码并显示你在哪里stuck@Rizier123我不太明白你的意思mean@terces907谢谢你的澄清。然而,像你这样的简单评论可以给我以前不知道的答案。无论如何,我仍然有一个问题,即输出中只显示第一个数字。我在原始问题中加入了代码。再次感谢。@Lamar,不客气。另请参阅其他答案,其中也显示了存档此文件的不同方式。顺便说一句:你有没有注意到,在你对这个问题表现出一些努力之后,upV是如何上升的?!在这里附加这个,让它更清楚:第一个元素是数字,第二个元素是子数组中的位置。我喜欢展示鲜为人知的功能的实际用途的答案:
Array
(
    [0] => 1
    [1] => 2
    [5] => 3
    [9] => 4
)
Array
(
    [1] => 0
    [2] => 1
    [3] => 5
    [4] => 9
)
<?php

    $str = "12abc3def4";

    echo "Digit | Position<br>";
    for($i = 0, $length = strlen($str); $i < $length; $i++) {
        if(is_numeric($str[$i]))
            echo $i . " | " . $str[$i] . "<br>";
    }

?>
Digit | Position
    0 | 1
    1 | 2
    5 | 3
    9 | 4