php截取字符串并保留完整xml标签的函数代码


Posted in PHP onFebruary 06, 2013
<?php  
    /** 
     * author: goosman 
     * blog: http://blog.csdn.net/lgg201 
     * mail: lgg860911@yahoo.com.cn 
     */      $str    = '0123456789<a>012</a>0123456789';  
    function substr_remain_tag($s, $o, $l) {  
        $is_match   = preg_match_all(<<<heredoc  
    #该正则表达式解析xml标签, 标签属性内部支持转义符"\", 支持对"\"自身和对应引号的转义  
    <(\w+)             #标签开始  
        (?:          #属性列表  
            \s+       #前置空格  
            \w+    #属性名 
            \s*    #属性名后的空白(为了兼容)  
            =        #属性名值之间的等号  
            \s*       #属性值前的空白(为了兼容)  
            (?:         #属性值(引号处理)  
                "         #双引号的情况  
                (?:  
                    \\\\\\\\   #吃掉连续两个转义符(表示转义符自身)  
                    \\\\"          #吃掉转义符接着一个引号(表示转义的引号)  
                    [^"\\\\]*   #其他字符  
                )*  
                "  
                '       #单引号情况  
                (?:  
                    \\\\\\\\   #吃掉连续两个转义符(表示转义符自身)  
                    \\\\'   #吃掉转义符接着一个引号(表示转义的引号)  
                    [^'\\\\]*       #其他字符  
                )*  
                '  
            )  
        )*  
    >  
    .*?               #标签内容  
    </(?1)>     #结束标签  
    ;x  
    heredoc  
    , $s, $matches, PREG_OFFSET_CAPTURE, $o);  
        if ( $is_match ) {  
            foreach ( $matches[0] as $match ) {  
                $o0 = $match[1];  
                #标签左边界越过截取目标右边界, 退出  
                if ( $o0 >= $o + $l ) break;  
                $l0 = strlen($match[0]);  
                #标签右边界在截取目标右边界内, 继续  
                if ( $o0 + $l0 < $o + $l ) continue;  
                #以下为标签跨边界处理  
                $l  = $o0 + $l0 - $o;  
                break;  
            }  
        }  
        return substr($s, $o, $l);  
    }   
    echo $str . chr(10);  
    echo substr_remain_tag($str, 0, 20) . chr(10);
PHP 相关文章推荐
phpmyadmin中配置文件现在需要绝密的短语密码的解决方法
Feb 11 PHP
php下图片文字混合水印与缩略图实现代码
Dec 11 PHP
snoopy 强大的PHP采集类使用实例代码
Dec 09 PHP
浅析php面向对象public private protected 访问修饰符
Jun 30 PHP
php 中文字符串首字母的获取函数分享
Nov 04 PHP
VB中的RasEnumConnections函数返回632错误解决方法
Jul 29 PHP
php实现多维数组中每个单元值(数字)翻倍的方法
Feb 16 PHP
php读取csc文件并输出
May 21 PHP
ThinkPHP在Cli模式下使用模板引擎的方法
Sep 25 PHP
浅谈php中fopen不能创建中文文件名文件的问题
Feb 06 PHP
php实现用户注册密码的crypt加密
Jun 08 PHP
php 删除一维数组中某一个值元素的操作方法
Feb 01 PHP
php中存储用户ID和密码到mysql数据库的方法
Feb 06 #PHP
php中使用__autoload()自动加载未定义类的实现代码
Feb 06 #PHP
php中使用preg_match_all匹配文章中的图片
Feb 06 #PHP
php中使用addslashes函数报错问题的解决方法
Feb 06 #PHP
深入理解ob_flush和flush的区别(ob_flush()与flush()使用方法)
Feb 06 #PHP
php中设置index.php文件为只读的方法
Feb 06 #PHP
php中选择什么接口(mysql、mysqli)访问mysql
Feb 06 #PHP
You might like
PHP的历史和优缺点
2006/10/09 PHP
php将数据库中的电话号码读取出来并生成图片
2008/08/31 PHP
PHP 用数组降低程序的时间复杂度
2009/12/04 PHP
PHP包含文件函数include、include_once、require、require_once区别总结
2014/04/05 PHP
PHP滚动日志的代码实现
2015/06/10 PHP
php将数组存储为文本文件方法汇总
2015/10/28 PHP
PHP中header函数的用法及其注意事项详解
2016/06/13 PHP
PHP输出XML格式数据的方法总结
2017/02/08 PHP
PHP获取真实客户端的真实IP
2017/03/07 PHP
PHP SFTP实现上传下载功能
2017/07/26 PHP
php实现支付宝当面付(扫码支付)功能
2018/05/30 PHP
jquery 防止表单重复提交代码
2010/01/21 Javascript
js href的用法
2010/05/13 Javascript
分享一个用Mootools写的鼠标滑过进度条改变进度值的实现代码
2011/12/12 Javascript
制作jquery遮罩层效果导航菜单代码分享
2013/12/25 Javascript
jQuery动态添加
2016/04/07 Javascript
JS表格组件BootstrapTable行内编辑解决方案x-editable
2016/09/01 Javascript
JS 判断某变量是否为某数组中的一个值的3种方法(总结)
2017/07/10 Javascript
一步步教会你微信小程序的登录鉴权
2018/04/09 Javascript
vue+web端仿微信网页版聊天室功能
2019/04/30 Javascript
vue2 拖动排序 vuedraggable组件的实现
2019/08/08 Javascript
d3.js 地铁轨道交通项目实战
2019/11/27 Javascript
React中使用UMEditor的方法示例
2019/12/27 Javascript
JS co 函数库的含义和用法实例总结
2020/04/08 Javascript
解决vue-pdf查看pdf文件及打印乱码的问题
2020/11/04 Javascript
Python中关于字符串对象的一些基础知识
2015/04/08 Python
Python操作csv文件实例详解
2017/07/31 Python
python基础知识(一)变量与简单数据类型详解
2019/04/17 Python
Django中使用极验Geetest滑动验证码过程解析
2019/07/31 Python
python实现一个点绕另一个点旋转后的坐标
2019/12/04 Python
使用HTML5 IndexDB存储图像和文件的示例
2018/11/05 HTML / CSS
护士上岗前培训自我鉴定
2014/04/20 职场文书
采购部长岗位职责
2014/06/13 职场文书
2014年销售工作总结与计划
2014/12/01 职场文书
2016年劳模先进事迹材料
2016/02/25 职场文书
JavaScript前端面试扁平数据转tree与tree数据扁平化
2022/06/14 Javascript