Как получить ЧИСЛО в строке «постоянная-строка-ЧИСЛО-*»?

У меня есть такие строки, как constant-string-NUMBER-*, где

  • constant-string- - это константная строка (которую я знаю и могу использовать для получения ЧИСЛА), например. fix-str-
  • NUMBER — любое натуральное число
  • -* может быть любой строкой

Примеры строковых результатов:

fix-str-0
// result: 0

fix-str-0-another-str
// result: 0

fix-str-123
// result: 123

fix-str-456789
// result: 456789

fix-str-123456789-yet-another-str
// result: 1234567899

fix-str-999999-another-str-123
// result: 999999

Я хотел бы извлечь НОМЕР из этих строк в PHP, чтобы я мог связать это число с переменной, например. $numberFromString = ?.

Любое понимание?

Можете ли вы добавить образец строки и ожидаемый результат?

SaSkY 08.01.2023 23:21

@SaSkY Вопрос обновлен

user502052 08.01.2023 23:26

Один из возможных способов сделать это без регулярного выражения, основанный на ваших примерах с фиксированной строкой, - это explode строка на -. Если массив, возвращенный из взрыва, имеет count(array) >= 3, используйте значение из массива [2].

Paul T. 08.01.2023 23:43

5-й результат — опечатка с дополнительным 9, верно?

user3783243 09.01.2023 00:09
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
78
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете представить строку как массив символов. Используйте функцию PHP substr(), где вторым аргументом является число, от которого осталась ваша строка.

Пример. Вернуть «мир» из строки:

<?php
echo substr("Hello world",6);
?>

Информация отсюда: https://www.w3schools.com/php/func_string_substr.asp

Это решение было бы конечным. OP ищет динамическое решение и выполняет некоторую проверку ввода.

user3783243 09.01.2023 00:03

Да, согласен, лучше всегда использовать универсальное решение. Я новичок, поэтому решил предложить ответ, который знаю и который работает в данном случае!

AndreyDerets 09.01.2023 07:52
Ответ принят как подходящий

Попробуй это:

fix-str-(\d+)
  • fix-str- соответствует этой строке.
  • (\d+), за которым следует одна или несколько цифр, и сохраните число в первой группе захвата.

РЕДАКТИРОВАТЬ

От @user3783243 мы также можем использовать fix-str-\K\d+ без необходимости создания группы захвата.

fix-str-\K\d+
  • fix-str- сопоставьте эту строку, затем..
  • \K сбросить начальную точку заявленного матча.
  • \d+ затем сопоставьте одну или несколько цифр.

См. демонстрацию регулярных выражений

<?php 
$str  = "fix-str-123456789-yet-another-str fix-str-234";

$pattern = "/fix-str-\K\d+/";

preg_match($pattern, $str, $arr1); //Find only the first match.

echo "The first match: " . $arr1[0]; //Output: 123456789

echo "\n\n\n";

preg_match_all($pattern, $str, $arr2); //Find all the matches.

echo "All the matches: " . implode(',', $arr2[0]); //Output: 123456789,234
?>

@user3783243 user3783243 Это идеальный улов, я обновлю ответ :)

SaSkY 09.01.2023 00:09

Основываясь на ваших примерах строк, есть два возможных способа. Один способ может использовать explode, тогда, конечно, другой способ может быть с preg_match для регулярного выражения. Я покажу оба способа только для того, чтобы показать, что регулярное выражение не всегда абсолютно необходимо.

Использование explode:

$strings = [
'fix-str-0',
'fix-str-0-another-str',
'fix-str-123',
'fix-str-456789',
'fix-str-123456789-yet-another-str',
'fix-str-999999-another-str-123',
];

$match = [];
$matches = [];
foreach ($strings as $string) {
    $match = explode('-', $string);
    
    if (count($match) >= 3) {
        $matches[] = $match[2]; // Array offset 2 has the number
    }
}

foreach($matches as $found) {
    echo $found, PHP_EOL;
}

// Output:

0
0
123
456789
123456789
999999

Использование preg_match:

$strings = [
'fix-str-0',
'fix-str-0-another-str',
'fix-str-123',
'fix-str-456789',
'fix-str-123456789-yet-another-str',
'fix-str-999999-another-str-123',
];

$match = [];
$matches = [];
foreach ($strings as $string) {
      // match 1 or more digits, store to $match
    preg_match('/(\d+)/', $string, $match);
    
    if (!empty($match)) {
        $matches[] = $match[0]; // use the first match
    }
}

foreach($matches as $found) {
    echo $found, PHP_EOL;
}

// Output:

0
0
123
456789
123456789
999999

Другие вопросы по теме