如何在php中从字符串生成数组

Kom*_*mal 4 php regex

这是我的字符串

#Jhon:经理#Mac:项目经理#Az:所有者

我想要像这样的数组

$array = ['0' => 'Manager', '1' => 'Project Manager', '2' => 'Owner']
Run Code Online (Sandbox Code Playgroud)

我尝试了这个,但每次只返回'经理'

$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;
  }
} 
Run Code Online (Sandbox Code Playgroud)

Wik*_*żew 8

您可以preg_split使用以下解决方案:

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

请参阅PHP演示正则表达式演示.

图案细节:

  • \s* - 0+空格
  • #- 文字#符号
  • [^:]+ 匹配1+以外的字符 :
  • : - 冒号
  • \s* - 0+空格.

请注意,-1preg_split函数中$limit告诉PHP分割任意次数(如果需要)的参数,PREG_SPLIT_NO_EMPTY并将丢弃所有空匹配(如果您需要保留空匹配,则可以删除此匹配,这取决于您需要进一步执行的操作) .


Sah*_*ati 6

这里我们preg_match用来实现所需的输出.

正则表达式: #\w+\s*\:\s*\K[\w\s]+

1. #\w+\s*\:\s*\K将匹配#然后wordsspaces然后: \K将复位电流匹配.

2. [\w\s]+这将匹配包含words和的所需输出spaces.

解决方案1:

<?php
ini_set('display_errors', 1);
$string="#Jhon: Manager #Mac: Project Manager #Az: Owner";
preg_match_all("/#\w+\s*\:\s*\K[\w\s]+/", $string,$matches);
print_r($matches);
Run Code Online (Sandbox Code Playgroud)

输出:

Array
(
    [0] => Array
        (
            [0] => Manager 
            [1] => Project Manager 
            [2] => Owner
        )

)
Run Code Online (Sandbox Code Playgroud)


在这里,我们正在使用array_mapexplode实现理想的目标.在这里,我们首先将exploding字符串打开#,然后将其数组值展开:first在结果数组中推送其索引.

解决方案2:

在此处尝试此代码段

<?php

$string="#Jhon: Manager #Mac: Project Manager #Az: Owner";
$result=  array_map(function($value){
    return trim(explode(":",$value)[1]);
}, array_filter(explode("#", $string)));
print_r(array_filter($result));
Run Code Online (Sandbox Code Playgroud)

输出:

Array
(
    [1] => Manager
    [2] => Project Manager
    [3] => Owner
)
Run Code Online (Sandbox Code Playgroud)