Найти и разбить строку по первому символу, который не равен 0 - PullRequest
0 голосов
/ 30 апреля 2018

Я хотел знать, как можно разбить строку на основе первого символа, который не равен 0, например,

$ID = ABC-000000160810;

Я хочу разделить идентификатор, чтобы он выглядел так:

$split_ID = 160810;

Я пытался получить только последние 6 цифр, однако проблема заключалась в том, что эти 6 цифр не всегда были согласованными, поэтому просто нужно разделить на основе первого ненулевого значения. Какой самый простой способ добиться этого?

Спасибо.

Ответы [ 5 ]

0 голосов
/ 30 апреля 2018

Для вашего примера "ABC-00000016081" вы можете использовать регулярное выражение, которое будет соответствовать первой части до тех пор, пока вы не встретите не ноль, а затем использовать \K, чтобы не включать ранее использованные символы в окончательное совпадение.

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

  • [^-]+ Совпадение не - один или несколько раз с использованием отрицательного класса символов
  • - Совпадение буквально
  • 0+ Сопоставьте один или несколько раз ноль (если вы хотите, чтобы ваше совпадение было без начальных нулей, вы можете использовать 0*)
  • \K Сбрасывает начальную точку указанного совпадения
  • [1-9][0-9]* Соответствует вашему значению, начиная с цифры 1 -9

Test

0 голосов
/ 30 апреля 2018

Вы можете вычесть часть ABC и умножить на 1, чтобы сделать ее числом.

$ID = "ABC-000000160810";

Echo substr($ID, 4)*1;
0 голосов
/ 30 апреля 2018

Используйте ltrim для удаления начальных символов.

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

Выше необходимо включить расширение mbstring. Если вы столкнулись с ошибкой, включите расширение или используйте немибайтные функции substr и strpos. Вероятно, вы должны привыкнуть использовать строковые функции mb_.

Это также должно работать:

const CHAR_MASK = 'a..zA..Z-0';
$id = 'ABC-00001234';
$numeric = ltrim($id, CHAR_MASK);
echo $numeric; // 1234
0 голосов
/ 30 апреля 2018

Вот способ использования регулярного выражения:

$id = 'ABC-000000160810';
preg_match('/-0*([1-9][0-9]*)/', $id, $matches);
$split_id = $matches[1];
0 голосов
/ 30 апреля 2018

Вы можете использовать ltrim , если хотите удалить только первые нули.

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