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

时间:2015-08-23 10:28:16

标签: php regex string

我有一个字符串例如:

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

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

预期产出:

preg_match('/[\d*]/', "12abc3def4", $output) 

修改

所以我被告知发现正则表达式无法实现这个位置。现在我需要找到字符串中的数字,然后查找它们的位置。问题是我使用以下正则表达式:

input{opacity:.4; }
input:focus{background-color: lightgreen;
  cursor: pointer;
    -webkit-transition: transition all ease-out 1s;
    -moz-transition:transition all 2s ease-out 1s;
    -o-transition: transition all 2ms ease-out 1s;
    transition:transition all 2s ease-out 1s;} 

数字可能会出现多次,或者从不出现。字符串也可能没有任何数字。

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

3 个答案:

答案 0 :(得分:3)

您可以将preg_match_all与标记PREG_OFFSET_CAPTURE

一起使用
$str = "12abc3def4";

if(preg_match_all('/\d/', $str, $out, PREG_OFFSET_CAPTURE)!==false)
  print_r($out[0]);

\d匹配数字[0-9];见test at eval.in

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 0
        )

    [1] => Array
        (
            [0] => 2
            [1] => 1
        )

    [2] => Array
        (
            [0] => 3
            [1] => 5
        )

    [3] => Array
        (
            [0] => 4
            [1] => 9
        )

)

答案 1 :(得分:2)

您可以将字符串拆分为包含str_split()的数组,并使用array_filter()对其进行过滤。

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

$str = '12abc3def4';

$filtered = array_filter(str_split($str), function($ch) {
    return ctype_digit($ch); // return `true` for `integer` only
});

print_r($filtered);

收率:

Array
(
    [0] => 1
    [1] => 2
    [5] => 3
    [9] => 4
)

为了更好地反映您的示例输出,只需var_dump(array_flip($filtered));

Array
(
    [1] => 0
    [2] => 1
    [3] => 5
    [4] => 9
)

希望这会有所帮助:)

答案 2 :(得分:2)

因为你可以access a string like an array,只需简单地遍历字符串,如果是数字打印位置,例如

<?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