Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get specific values from a string of php

Tags:

php

Edited my que.. Value also contains some letters

I have search through so many questions but I couldn't find it.
I have string like this:

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

What I want to do is get all values only in output like:

284t810 39h1047 3700p134

I used substr and strpos combine to get value but it only removes portion of data ahead of first "value=" so output is like:

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

I just want to delete everything else and keep only numbered value which is after "value="

Sorry if there is any confusion. Using stackoverflow for first time.

like image 554
Kesh Avatar asked Jul 08 '15 09:07

Kesh


4 Answers

use this code: with this code you get any strings that they are after value=. I think this is the easiest solution.

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

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

@Kesh : \s means space. [^\s] means everything except space. and + means at least one char. and the () around it is for selecting the string so we can use it after the operation. ([^\s]+) means select everything except space and put them to the $matches

like image 91
Mohammad Sadegh Avatar answered Oct 20 '22 18:10

Mohammad Sadegh


Do it via regular expression

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

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

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

Here you can see demo

like image 35
Hassaan Avatar answered Oct 20 '22 19:10

Hassaan


You could use a lookahead to find all value= and take all characters after that until a space character is encountered then implode the results using a space.

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

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

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

The output is

284t810 39h1047 3700p134
like image 1
David Barker Avatar answered Oct 20 '22 20:10

David Barker


Sticking to substr() and strpos() you can do the following as long as you can trust the format of the data.

$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";

This will yield the following:

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

I'm guessing that perhaps you wanted to use a strpos() based solution for efficiency purposes.

like image 1
A Smith Avatar answered Oct 20 '22 20:10

A Smith