这是我的字符串
#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)
您可以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)
图案细节:
\s* - 0+空格#- 文字#符号[^:]+ 匹配1+以外的字符 : : - 冒号\s* - 0+空格.请注意,-1在preg_split函数中是$limit告诉PHP分割任意次数(如果需要)的参数,PREG_SPLIT_NO_EMPTY并将丢弃所有空匹配(如果您需要保留空匹配,则可以删除此匹配,这取决于您需要进一步执行的操作) .
这里我们preg_match用来实现所需的输出.
正则表达式: #\w+\s*\:\s*\K[\w\s]+
1.
#\w+\s*\:\s*\K将匹配#然后words再spaces然后:\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_map并explode实现理想的目标.在这里,我们首先将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)
| 归档时间: |
|
| 查看次数: |
120 次 |
| 最近记录: |