首页 > 解决方案 > 查找字符串中任何大于某个数字的数字第一次出现的位置

问题描述

我有这个字符串:“20 加 1000 不是 20000。”

我想得到第一个大于 10000 的数字的位置。

我实际上(并且出于不同的目的)使用这个第一个答案代码来获取我的字符串中第一个数字的位置:

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

但它不区分数字大小,所以,这个函数可能缺少什么来获取大于 10000 的数字第一次出现的位置?

欢迎任何解决方案,不一定是使用该功能。

标签: phpregex

解决方案


只需使用此正则表达式

\d\d\d\d\d\d*

提取所有 5 位或更多数字的匹配项。然后你可以简单地检查第一个匹配并返回它

function getFirstOccr($srcStr, $places=5)
{
//    $matchStr = '\d{'.$places.'}\d*';
    $matchStr = str_repeat('\d', $places).'\d*';
    preg_match('/'.$matchStr.'/', $srcStr, $matches);

    return isset($matches[0]) ? strpos($srcStr,$matches[0]) : false;
}

$srcStr = "20 plus 1000 is not 20000.";
print getFirstOccr($srcStr,5);

我相信这应该是计算效率最高的


推荐阅读