关于正则表达式:在字符串中找到第一个出现的任何数字的位置(php)

Find the position of the first occurring of any number in string (php)

有人能帮我找到字符串中任何数字第一次出现的位置的算法吗?

我在网上找到的代码不起作用:

1
2
3
4
5
function my_ofset($text){
    preg_match('/^[^\-]*-\D*/', $text, $m);
    return strlen($m[0]);
}
echo my_ofset('[HorribleSubs] Bleach - 311 [720p].mkv');


1
2
3
4
5
6
7
8
function my_offset($text) {
    preg_match('/\d/', $text, $m, PREG_OFFSET_CAPTURE);
    if (sizeof($m))
        return $m[0][1]; // 24 in your example

    // return anything you need for the case when there's no numbers in the string
    return strlen($text);
}


1
2
3
4
function my_ofset($text){
    preg_match('/^\D*(?=\d)/', $text, $m);
    return isset($m[0]) ? strlen($m[0]) : false;
}

应该能解决这个问题。最初的代码要求在第一个数字之前有一个-,也许这就是问题所在?


当使用时,内置的php函数strcspn()将与stanislav shabalin的答案中的函数相同:

1
strcspn( $str , '0123456789' )

实例:

1
2
3
echo strcspn( 'That will be $2.95 with a coupon.' , '0123456789' ); // 14
echo strcspn( '12 people said yes'                , '0123456789' ); // 0
echo strcspn( 'You are number one!'               , '0123456789' ); // 19

高温高压


我可以做正则表达式,但我必须进入一个改变的状态记住它在我编码之后会做什么。

下面是一个简单的PHP函数,您可以使用…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function findFirstNum($myString) {

    $slength = strlen($myString);

    for ($index = 0;  $index < $slength; $index++)
    {
        $char = substr($myString, $index, 1);

        if (is_numeric($char))
        {
            return $index;
        }
    }

    return 0;  //no numbers found
}