Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to generate set of array from string in php

Tags:

regex

php

This is my string

#Jhon: Manager #Mac: Project Manager #Az: Owner

And I want array something like this

$array = ['0' => 'Manager', '1' => 'Project Manager', '2' => 'Owner']

I tried this but each time return only 'Manager'

$string = '#Jhon: Manager #Mac: Project Manager #Az: Owner';
getText($string, ':', ' #')
public function getText($string, $start, $end)
{
  $pattern = sprintf(
      '/%s(.+?)%s/ims',
      preg_quote($start, '/'), preg_quote($end, '/')
  );

  if (preg_match($pattern, $string, $matches)) {
      list(, $match) = $matches;
      echo $match;
  }
} 
like image 479
Komal Avatar asked Dec 07 '22 18:12

Komal


1 Answers

You may preg_split the contents and use the following solution:

$re = '/\s*#[^:]+:\s*/';
$str = '#Jhon: Manager #Mac: Project Manager #Az: Owner';
$res = preg_split($re, $str, -1, PREG_SPLIT_NO_EMPTY);
print_r($res);

See the PHP demo and a regex demo.

Pattern details:

  • \s* - 0+ whitespaces
  • # - a literal # symbol
  • [^:]+ to match 1+ chars other than :
  • : - a colon
  • \s* - 0+ whitespaces.

Note that -1 in the preg_split function is the $limit argument telling PHP to split any amount of times (as necessary) and PREG_SPLIT_NO_EMPTY will discard all empty matches (this one may be removed if you need to keep empty matches, that depends on what you need to do further).

like image 145
Wiktor Stribiżew Avatar answered Dec 10 '22 23:12

Wiktor Stribiżew