18910140161

求解,字符串按特殊字符进行拆分?

顺晟科技

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);
相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航