Как получить данные по шаблону с помощью preg_match?

Здравствуйте.

Подскажите правильный подход к реализации идеи. Необходимо получать числовой ID помещать его в переменную и затем обрабатывать функцией.

Смотрю в сторону preg_match но не могу понять как сформулировать корректный шаблон.

Строка:
Разыгрывает карту @67@, @6@ или @168@, затем удаляет себя из игры.


Необходимо получать числа внутри @...@, учитывая что в строке может быть от одного до трёх блоков с числом.

Заранее благодарен за совет.
  • Вопрос задан
  • 292 просмотра
Решения вопроса 1
Ivanq
@Ivanq
Знаю php, js, html, css
Если нужно только получить
$str = "@1@ @2@";
preg_match_all("/@(\d+)@/", $str, $matches);
var_dump($matches[1]); // Массив ID


Если нужно изменить на что-то другое (скажем, ссылку)
$str = "@1@ @2@";
echo preg_replace_callback("/@(\d+)@/", function($arr) {
    return "<a href='cards/" . $arr[1] . "'>@" . $arr[1] . "@</a>"; // В $arr[1] ID
}, $str);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@karminski
Senior React.JS Developer
php.net/manual/ru/function.preg-match-all.php

$source = "Разыгрывает карту @67@, @6@ или @168@, затем удаляет себя из игры.";
preg_match_all("/@(\d+)@/", $source, $matches);


На выходе:
array (size=2)
  0 => 
    array (size=3)
      0 => string '@67@' (length=4)
      1 => string '@6@' (length=3)
      2 => string '@168@' (length=5)
  1 => 
    array (size=3)
      0 => string '67' (length=2)
      1 => string '6' (length=1)
      2 => string '168' (length=3)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы