Как мне захватить все числовые подстроки из строки?

Моя строка выглядит так:

Response: 311768560
311768562
311768564

Я пытался:

$success_pattern="Response: ((\d+)[\n])*";
$response="Response: 311768560\n311768562\n311768564\n311768566";
preg_match("/$success_pattern/i", $response, $match);

Выход:

Array (
[0] => Response: 311768560 311768562 311768564
[1] => 311768564
[2] => 311768564
)

Мне нужен массив, содержащий все числа в качестве вывода:

array('311768560','311768562','311768564');

0

Решение

<?php

$string="Response: 311768560 311768562 311768564";
preg_match_all("/[\d]+/", $string, $matches);
print_r($matches);

Выход:

Array
(
[0] => Array
(
[0] => 311768560
[1] => 311768562
[2] => 311768564
)

)
0

Другие решения

Старайтесь не зацикливаться на конкретной функции, такой как preg_match(), PHP предлагает несколько способов создания желаемого результата. Я покажу вам три разных подхода:

вход:

$response="Response: 311768560
311768562
311768564";

Способ № 1: explode() с substr() а также strpos() (демонстрация)

$array=explode("\r\n",substr($response,strpos($response,' ')+1));

* обратите внимание, этот метод предполагает, что первая строка (Response) является единственной нежелательной подстрокой и всегда первой. Так же \r может не потребоваться в зависимости от вашей среды программирования. Это, пожалуй, самый быстрый из моего списка методов, потому что он не использует регулярные выражения, но он требует 3 вызова функции и одного приращения — не говоря уже о том, что это может быть слишком буквальным для вашего фактического варианта использования.

Способ № 2: preg_match_all() (демонстрация)

$array=preg_match_all('/\d+/',$response,$out)?$out[0]:[];

Этот метод очень прямой, быстрый и требует минимального кода. Если есть какие-либо недостатки, они заключаются в том, что preg_match_all() возвращает результат true | false и генерирует выходную переменную в виде многомерного массива. Чтобы изменить этот вывод в соответствии с вашими одномерными требованиями, я помещаю встроенное условие в конец функции, которая доставляет нужные данные в $array,

Способ № 3: preg_split() (демонстрация)

$array=preg_split('/[^\d]+/',$response,null,PREG_SPLIT_NO_EMPTY);

Эта функция ведет себя так же, как explode() кроме того, он обладает силой регулярных выражений. Шаблон идентифицирует все нецифровые подстроки и использует их как «разделители» и разбивает строку на каждую из них. Для вашего ввода первым разделителем будет «Response:», затем символы новой строки после: «311768560» и «311768562». Красота preg_split() является то, что он непосредственно обеспечивает одномерный массив, который вы ищете.

Выход:

Независимо от того, какой из вышеперечисленных методов вы используете, вы получите один и тот же правильный вывод: $array=array('311768560','311768562','311768564');

Если какой-либо из этих методов не соответствует вашему фактическому варианту использования, возможно, это продукт вашего $response строка слишком отличается от данных примера, которые вы разместили здесь.

0

Используйте функцию Array_shift ()

<?php
$str = "Response: 311768560 311768562 311768564";
$s = explode(" ",$str);
$p = array_shift($s);
print_r($s);
?>

выход

Array (
[0] => 311768560
[1] => 311768562
[2] => 311768564 )
-1
По вопросам рекламы [email protected]