用PHP查找字符串中的第一个数字位置

8
我能否问一下如何在PHP中查找字符串中第一个数字出现的位置? 例如,如果"abc2.mp3"是一个字符串,则返回3的值,因为第一个数字"2""abc2.mp3"中的位置是3(第一个位置是0)。
我使用了PHP中的strpos()函数,它只返回字符串是否为数字,即TRUEFALSE
谢谢您的回复。

你能展示一下你的实际例子吗?我几乎可以确定 strpos 正在按照它预期的方式工作。 - Andrew
亲爱的Ben Pearl Kahan,Rizier123,我认为我的问题与以前的不同,因为它用于查找非特定的第一次出现的数字字符串。 - CKH
2个回答

2

在我看来,最简单的方法是使用带有 PREG_OFFSET_CAPTURE 标志的 preg_match() 函数。

$string = 'abc2.mp3';
if(preg_match('/[0-9]/', $string, $matches, PREG_OFFSET_CAPTURE)) {
  echo "Match at position " . $matches[0][1];
} else {
  echo "No match";
}

请问代码中的'$matches[0][1]'是什么意思? - CKH
$matches是一个数组,其中包含每个正则表达式匹配的一个数组。这些数组中的每一个都有一个条目[0],它保存匹配的文本和一个条目[1],它保存匹配的位置。只需执行var_dump($matches)即可查看其效果。因此,$matches[0][1]是第一个匹配的位置。 - maxhb

0

strpos() 是你要找的 PHP 函数。当字符串未被找到时,该函数返回 FALSE,这可能会让你感到困惑。

来自 PHP 文档:

返回针对 haystack 字符串开始位置(独立于偏移量)的 needle 存在的位置。还请注意,字符串位置从 0 开始,而不是 1。

如果未找到 needle,则返回 FALSE。

编辑:

你可以使用带有 preg_match() 的正则表达式。这个函数应该能解决问题:

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

谢谢。但是我如何在字符串中找到数值呢? - CKH
@CKH,你有什么输入和想要什么输出?你的描述非常模糊。 - Rein
我可以用一个好的方式来问。这是为了找到字符串中第一次出现的数字位置。 - CKH
好了,谢谢!我更新了我的帖子,并添加了一个可用的函数。 - Rein

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接