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

字符串:

$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 如何实现?

阅读 1.5k
1 个回答

使用 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);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题