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 相关文章推荐
PHP音乐采集(部分代码)
Feb 14 PHP
PHP高级OOP技术演示
Aug 27 PHP
解析PHP中$_FILES的使用以及注意事项
Jul 05 PHP
Ajax+PHP快速上手及简单应用说明
Jul 24 PHP
对PHP语言认识上需要避免的10大误区
Jun 12 PHP
ThinkPHP3.1的Widget新用法
Jun 19 PHP
destoon实现调用图文新闻的方法
Aug 21 PHP
ThinkPHP调试模式与日志记录概述
Aug 22 PHP
thinkphp视图模型查询提示ERR: 1146:Table 'db.pr_order_view' doesn't exist的解决方法
Oct 30 PHP
php制作简单模版引擎
Apr 07 PHP
[原创]PHPCMS遭遇会员投稿审核无效的解决方法
Jan 11 PHP
php实现每日签到功能
Nov 29 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判断GIF图片是否为动画的方法
2020/09/04 PHP
PHP中几个可以提高运行效率的代码写法、技巧分享
2014/08/21 PHP
php字符串函数学习之strstr()
2015/03/27 PHP
Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
2020/04/14 PHP
检测是否已安装 .NET Framework 3.5的js脚本
2009/02/14 Javascript
javascript时区函数介绍
2012/09/14 Javascript
基于javascipt-dom编程 table对象的使用
2013/04/22 Javascript
js window.print实现打印特定控件或内容
2013/09/16 Javascript
用jquery中插件dialog实现弹框效果实例代码
2013/11/15 Javascript
javascript Event对象详解及使用示例
2013/11/22 Javascript
JavaScript—window对象使用示例
2013/12/09 Javascript
元素未显示设置width/height时IE中使用currentStyle获取为auto
2014/05/04 Javascript
jQuery中prevAll()方法用法实例
2015/01/08 Javascript
DOM基础教程之事件对象
2015/01/20 Javascript
jQuery定义插件的方法
2015/12/18 Javascript
基于JavaScript的操作系统你听说过吗?
2016/01/28 Javascript
JavaScript仿支付宝6位数字密码输入框
2016/12/29 Javascript
详解Vue使用命令行搭建单页面应用
2017/05/24 Javascript
vue中component组件的props使用详解
2017/09/04 Javascript
浅谈vue-router 路由传参的方法
2017/12/27 Javascript
详解django模板与vue.js冲突问题
2019/07/07 Javascript
layui 选择列表,打勾,点击确定返回数据的例子
2019/09/02 Javascript
[02:00]DAC2018主宣传片——龙征四海,剑问东方
2018/03/20 DOTA
Python实现的使用telnet登陆聊天室实例
2015/06/17 Python
pandas把dataframe转成Series,改变列中值的类型方法
2018/04/10 Python
python小程序实现刷票功能详解
2019/07/17 Python
TensorFlow基本的常量、变量和运算操作详解
2020/02/03 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
2020/02/20 Python
python图形界面开发之wxPython树控件使用方法详解
2020/02/24 Python
Python Tornado批量上传图片并显示功能
2020/03/26 Python
解决flask接口返回的内容中文乱码的问题
2020/04/03 Python
python实现简单的井字棋游戏(gui界面)
2021/01/22 Python
本科毕业生专业自荐书范文
2014/02/05 职场文书
校运会宣传稿大全
2015/07/23 职场文书
一个成功的互联网创业项目,必须满足这些要求
2019/08/23 职场文书