11

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

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

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

5 回答 5

20
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);
}
于 2011-09-21T06:53:33.953 回答
19

像这样使用时,内置的 PHP 函数strcspn()将与 Stanislav Shabalin 的答案中的函数相同:

strcspn( $str , '0123456789' )

例子:

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

高温高压

于 2018-03-30T17:22:15.320 回答
15
function my_ofset($text){
    preg_match('/^\D*(?=\d)/', $text, $m);
    return isset($m[0]) ? strlen($m[0]) : false;
}

应该为此工作。原始代码要求 a-出现在第一个数字之前,也许这就是问题所在?

于 2011-09-21T06:51:09.930 回答
0

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

这是一个简单的 PHP 函数,您可以使用...

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
}
于 2017-10-07T21:53:51.923 回答
0

问题

查找字符串中第一个出现的数字

解决方案

这是javascript中的非正则表达式解决方案

var findFirstNum = function(str) {
    let i = 0;
    let result = "";
    let value;
    while (i<str.length) {
      if(!isNaN(parseInt(str[i]))) {
        if (str[i-1] === "-") {
          result = "-";
        }
        while (!isNaN(parseInt(str[i])) && i<str.length) {
          result = result + str[i];
          i++;
        }
        break;
      }
      i++;
    }
    return parseInt(result);  
};

示例输入

findFirstNum("words and -987 555");

输出

-987
于 2019-08-26T06:01:13.867 回答