PHP 截取字符串中某两个字符(串)之间的字符串 考虑多个的情况

场景:近日,我在开发中遇到了这样一个问题,需要将一段html标签中的 <video>...</video> 标签提取出来并将它替换为src的属性值(即视频的链接),最后拼接成数组返回;

分析

  1. 字符串切割。将原始字符串按照<video>标签切割成数组
  2. 字符串截取。截取src属性值

方案

     $videoStartStr = explode('<video', $content);
        $l = count($videoStartStr);
        $videoNum = $l - 1; //视频个数
        $data[0] = [
            'type'=>0,
            'content'=>$videoStartStr[0],
        ];
        /*生成内容数组*/
        for ($i=1;$i<=$videoNum;$i++) {
            $l = count($data);
            $videoEndStr = explode('</video>', $videoStartStr[$i]);
            $data[$l]=[
                'type'=>1,
                'content'=>$videoEndStr[0],
            ];
            $data[$l+1]=[
                'type'=>0,
                'content'=>$videoEndStr[1],
            ];
        }
        /*截取视频src*/
        foreach ($data as $k=> &$v) {
            if (!trim($v['content']) ) {
                unset($data[$k]);
            }
            if ($v['type'] == 0) {
                continue;
            }
            $s= strpos($v['content'],"http");
            $e= strpos($v['content'],"mp4");
            $v['content'] = substr($v['content'],$s,$e-$s+3) ;
        }
        $data = array_values($data);

 

说明

  1. $content为一段html标签,含有一个或多个视频(<video>标签)
  2. 数组中的type 0或1分别表示普通便签(截取后正常返回)或视频链接(即将原始字符串中的video标签提取并替换为他的src链接)
  3. 这里是一段代码段,并不完整。各位访客如需使用我的这种方法只需定义一下$content字符串并做个输出测试即可!
  4. 在我的业务中,<video>标签不可能在开头。所以在使用的时候最好在字符串的卡头随机拼接上一些字符串,最后自己去除即可。

拓展:

  如果只是单纯的截取某两个字符串之间的字符串,通常会有个问题:不管用函数还是正则通常只能获取一个字符串(比如“phpabcdaefdaghdphp”截取a和d之间的字符串bc、ef和gh,正则 '/a.*d/' 通常会返回从第一个a到最后一个d之间的字符串,函数也只能获取到第一个ad之间的字符串或者最后一个ad之间的字符串)。想了好久才凑出来的如上的逻辑,其他的以此类推吧。。欢迎指正

posted @ 2018-03-01 10:55  Evergrande_Wang  阅读(382)  评论(0编辑  收藏  举报