通过非0的第一个字符查找并拆分字符串

时间:2018-04-30 03:05:48

标签: php string pattern-matching substring

我想知道如何根据非0的第一个字符拆分字符串,例如

$ID = ABC-000000160810;

我想拆分id,看起来像这样:

$split_ID = 160810;

我试图获得最后6位数字,但问题是6位数字可能并不总是一致,所以只需要根据第一个非零值进行拆分。实现这一目标的最简单方法是什么?

感谢。

5 个答案:

答案 0 :(得分:1)

这是使用正则表达式的方法:

$id = 'ABC-000000160810';
preg_match('/-0*([1-9][0-9]*)/', $id, $matches);
$split_id = $matches[1];

答案 1 :(得分:0)

如果您只想删除前导零,则可以使用ltrim

$ID = ABC-000000160810;
$split_ID = ltrim($str, '0');

答案 2 :(得分:0)

使用ltrim删除主要字符。

$id = 'ABC-00001234';
$numeric = ltrim(mb_substr($id, mb_strpos($id, '-') + 1), '0');
echo $numeric; // 1234

以上内容要求启用mbstring扩展名。如果遇到错误,请启用扩展程序或使用非多字节函数substrstrpos。可能你应该养成使用mb_字符串函数的习惯。

这也应该有效:

const CHAR_MASK = 'a..zA..Z-0';
$id = 'ABC-00001234';
$numeric = ltrim($id, CHAR_MASK);
echo $numeric; // 1234

答案 3 :(得分:0)

对于您的示例“ABC-00000016081”,您可以使用与第一部分匹配的正则表达式,直到您遇到不为零,然后使用\K不包括最终匹配中先前消耗的字符。< / p>

[^-]+-0+\K[1-9][0-9]+

  • [^-]+使用否定字符类匹配不是-一次或多次
  • -按字面意思匹配
  • 0+匹配一次或多次零(如果您希望匹配不带前导零,则可以使用0*
  • \K重置报告的匹配的起点
  • [1-9][0-9]*将您的值与数字1 -9
  • 匹配

Test

答案 4 :(得分:-1)

您可以将ABC部分删除,然后乘以1使其成为数字。

$ID = "ABC-000000160810";

Echo substr($ID, 4)*1;