rust string str?你想在Rust学习吗?Go考虑简单字符串插值特性
大家好,我是煎鱼。在日常开发 Go 工程中,我们经常会用 fmt.Printf 或 fmt.Sprintf 去写类似的拼装字符串的业务。如下代码:fmt.Printf("Hello Gopher %s
顺晟科技
2022-09-20 10:22:57
62
字符串:
$str = "两个人的小森林有*2*个热点*爆*词你还未看(217054)";
按进行拆分,两个xx*中间的标记为 type=2,其他标记 type=1 ,期望结果如下:
[
{
"type": 1,
"text": "两个人的小森林有"
},
{
"type": 2,
"text": "2",
},
{
"type": 1,
"text": "个热点",
},
{
"type": 2,
"text": "爆",
},
{
"type": 1,
"text": "词你还未看(217054)"
}
]
求解,php 如何实现?
使用 preg_split 使用正则表达式切割字符,并且在结果返回分隔符(PREG_SPLIT_DELIM_CAPTURE
)
array(5) {
[0]=>
string(24) "两个人的小森林有"
[1]=>
string(3) "*2*"
[2]=>
string(9) "个热点"
[3]=>
string(5) "*爆*"
[4]=>
string(23) "词你还未看(217054)"
}
然后对返回的结果使用 array_map 处理,然后判断首字符和尾字符是否为 *
,最后判断是否需要截取字符串。
<?php
$str = "两个人的小森林有*2*个热点*爆*词你还未看(217054)";
$result = preg_split('!(\*[^*]+?\*)!u', $str, -1, PREG_SPLIT_DELIM_CAPTURE);
$result = array_map(static function ($v) {
$matched = (mb_strpos($v, '*') === 0) && mb_substr($v, -1, 1) === '*';
$type = $matched ? 2 : 1;
return [
'type' => $type,
'text' => $matched ? mb_substr($v, 1, -1) : $v,
];
}, $result);
var_dump($result);
26
2023-02
30
2022-11
30
2022-11
29
2022-11
29
2022-11
29
2022-11