【问题标题】:Find first occurence numerical position in a string by php [duplicate]通过php在字符串中查找第一个出现的数字位置[重复]
【发布时间】:2016-04-11 20:00:26
【问题描述】:

请问如何用 PHP 查找字符串中第一次出现的数字位置? 例如,如果"abc2.mp3"是一个字符串,则返回值3,因为"abc2.mp3"中第一个出现的数字"2"的位置是3(第一个位置是0)。

我在PHP中使用了strpos()函数,它只返回字符串是否为数字,即TRUEFALSE

感谢您的回复。

【问题讨论】:

  • 你能给我们看看你的真实例子吗?我几乎可以肯定 strpos 正在按预期工作
  • 亲爱的 Ben Pearl Kahan,Rizier123,我认为我的问题与以前的问题不同,因为它用于查找非特定的首次出现的数字字符串

标签: php string strpos


【解决方案1】:

最简单的方法是使用带有标志 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]'是什么意思?
  • $matches 是一个数组,其中包含一个数组,用于正则表达式的每个匹配项。这些数组中的每一个都有一个保存匹配文本的条目 [0] 和一个保存匹配位置的条目 [1]。只需执行 `var_dump($matches)` 来查看它的实际效果。所以`$matches[0][1]`是第一个匹配的位置。
  • 有效!谢谢。
【解决方案2】:

strpos() 是您要查找的 PHP 函数。当找不到字符串时,此函数返回FALSE,这就是您可能会感到困惑的原因。

来自 PHP 文档:

返回针存在的位置相对于 haystack 字符串的开始位置(与偏移量无关)。另请注意,字符串位置从 0 开始,而不是 1。

如果没有找到针,则返回 FALSE。

编辑:

您可以将正则表达式与preg_match() 结合使用。这个函数应该可以解决问题:

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

【讨论】:

  • 谢谢。但是如何在字符串中找到数值呢?
  • @CKH 你有什么输入,你想要什么输出?你的描述很模糊。
  • 我可以好好问一下。就是找到一个字符串中第一次出现的数值位置
  • 这样更好,谢谢!我用一个工作函数更新了我的帖子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-21
  • 1970-01-01
  • 2012-03-24
  • 2019-09-22
  • 1970-01-01
  • 1970-01-01
  • 2019-07-13
相关资源
最近更新 更多