zoukankan      html  css  js  c++  java
  • 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之间的字符串)。想了好久才凑出来的如上的逻辑,其他的以此类推吧。。欢迎指正

  • 相关阅读:
    Swizzle在OC问题排查中的应用
    MacOS中系统提供的音频单元
    Mac catalyst 使用iOS-AudioUnit的音频采集、播放
    删除单向链表中的某一个节点
    C语言的的free和c++的delete的区别
    Mac下使用源码编译安装TensorFlow CPU版本
    ROC曲线与AUC值
    Linux中如何产生core文件?
    更改Linux默认栈空间的大小
    互信息(Mutual Information)
  • 原文地址:https://www.cnblogs.com/wxgthinking/p/8487369.html
Copyright © 2011-2022 走看看