我有一个字符串例如:
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",然后停在那里。
答案 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