簡體   English   中英

查找並按第一個不為0的字符拆分字符串

[英]Find and split a string by the first character that is not 0

我想知道如何根據不為0的第一個字符分割字符串,例如

$ID = ABC-000000160810;

我想分割id,所以它看起來像這樣:

$split_ID = 160810;

我嘗試僅獲取最后6位數字,但是問題是6位數字可能並不總是一致的,因此只需要根據第一個非零數字進行拆分即可。 最簡單的方法是什么?

謝謝。

這是使用正則表達式的一種方式:

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

如果只想刪除前導零,則可以使用ltrim

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

使用ltrim刪除前導字符。

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

以上要求啟用mbstring擴展名。 如果遇到錯誤,請啟用擴展或使用非多字節函數substrstrpos 可能您應該養成使用mb_ string函數的習慣。

這也應該起作用:

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

對於您的示例“ ABC-00000016081”,您可以使用正則表達式,該正則表達式將與第一部分匹配直到遇到非零為止,然后使用\\K在最終匹配中不包含先前消耗的字符。

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

  • [^-]+不匹配-使用否定的字符類一次或多次
  • -從字面上匹配
  • 0+一次或多次匹配零(如果希望不帶前導零的匹配,則可以使用0*
  • \\K重置報告的比賽的起點
  • [1-9][0-9]*匹配以1 -9開頭的值

測試

您可以減去ABC部分並乘以1使其成為一個數字。

$ID = "ABC-000000160810";

Echo substr($ID, 4)*1;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM