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