Получить определенные значения из строки php

Отредактировано мое... Значение также содержит несколько букв

У меня есть поиск по многим вопросам, но я не мог найти его. У меня строка такая:

Ab2cds value=284t810 shfn4wksn value=39h1047 hs2krj8dne value=3700p134

То, что я хочу сделать, это получить все значения только на выходе, например:

284t810 39h1047 3700p134

Я использовал substr и strpos для получения значения, но только удаляет часть данных перед первым значением "value =", поэтому вывод выглядит следующим образом:

284t810 shfn4wksn value=39h1047 hs2krj8dne value=3700p134

Я просто хочу удалить все остальное и сохранить только нумерованное значение, которое после "value ="

Извините, если есть какая-то путаница. Использование stackoverflow в первый раз.

Ответ 1

используйте этот код: с этим кодом вы получите любые строки, после которых они имеют value=. Я думаю, что это самое простое решение.

$str = 'b2cds value=284t810 shfn4wksn value=39h1047 hs2krj8dne value=3700p134';
preg_match_all('#value=([^\s]+)#', $str, $matches);

echo implode(' ', $matches[1]);

@Kesh: \s означает пробел. [^\s] означает все, кроме пробела. и + означает по крайней мере один символ. и () вокруг него для выбора строки, чтобы мы могли использовать ее после операции. ([^\s]+) означает выделить все, кроме пробела, и поместить их в $matches

Ответ 2

Сделайте это с помощью регулярного выражения

$str = 'b2cds value=284t810 shfn4wksn value=39h1047 hs2krj8dne value=3700p134';

preg_match_all("/value=([^\s]+)/", $str, $matches);

echo implode(" ", $matches[1]);

Здесь вы можете увидеть демо

Ответ 3

Вы можете использовать lookahead, чтобы найти все value= и взять все символы после этого, пока не появится символ пробела, а затем размойте результаты с помощью пробела.

$string = 'Ab2cds value=284t810 shfn4wksn value=39h1047 hs2krj8dne value=3700p134';

preg_match_all("/(?=value\=([^\s]+))/", $string, $matches);

$result = implode(" ", $matches[1]);

Выходной сигнал

284t810 39h1047 3700p134

Ответ 4

Попробуй это

$data = 'Ab2cds value=284810 shfn4wksn value=391047 hs2krj8dne value=3700134';
$array_data = explode(' ', $data);
foreach ($array_data as $array_dat) {
    $data_list[] = strstr($array_dat, '=');
}
foreach ($data_list as $key => $value) {
    $array[$key] = str_replace('=', '', $value);
}
var_dump(array_filter($array));

ВЫХОД

array(3) { [1]=> string(6) "284810" [3]=> string(6) "391047" [5]=> string(7) "3700134" } 

Ответ 5

Применяя к substr() и strpos(), вы можете делать следующее, если вы можете доверять формату данных.

$s = 'Ab2cds value=284t810 shfn4wksn value=39h1047 hs2krj8dne value=3700p134';
echo "Input string: $s<br>\n";

$out = '';
$offset = 0;
while ( $offset = strpos($s,'=',$offset) )
{
  $end = strpos($s,' ',$offset);
  if ( $end )
    $out .= substr($s,$offset+1,$end-$offset);
  else
    $out .= substr($s,$offset+1);

  $offset++;
}

echo "Output string: $out<br>\n";

Это даст следующее:

Input string: Ab2cds value=284t810 shfn4wksn value=39h1047 hs2krj8dne value=3700p134
Output string: 284t810 39h1047 3700p134

Я предполагаю, что, возможно, вы хотели использовать решение на основе strpos() для повышения эффективности.