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学习教程之第1天
Jun 15 PHP
PHP学习 变量使用总结
Mar 24 PHP
php中批量删除Mysql中相同前缀的数据表的代码
Jul 01 PHP
php中\r \r\n \t的区别示例介绍
Feb 08 PHP
PHP统计nginx访问日志中的搜索引擎抓取404链接页面路径
Jun 30 PHP
php中数字、字符与对象判断函数用法实例
Nov 26 PHP
服务器上配置PHP运行环境教程
Feb 12 PHP
php实现以只读方式打开文件的方法
Mar 16 PHP
Redis使用Eval多个键值自增的操作实例
Nov 04 PHP
Yii2.0实现生成二维码功能实例
Oct 24 PHP
PHP开发实现微信退款功能示例
Nov 25 PHP
Yii框架学习笔记之session与cookie简单操作示例
Apr 30 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 ucwords() 函数将字符串中每个单词的首字符转换为大写(实现代码)
2016/05/12 PHP
php-msf源码详解
2017/12/25 PHP
PHP设计模式之注册树模式分析
2018/01/26 PHP
poshytip 基于jquery的 插件 主要用于显示微博人的图像和鼠标提示等
2012/10/12 Javascript
JS实现悬浮移动窗口(悬浮广告)的特效
2013/03/12 Javascript
jQuery根据纬度经度查看地图处理程序
2013/05/08 Javascript
parentElement,srcElement的使用小结
2014/01/13 Javascript
Javascript冒泡排序算法详解
2014/12/03 Javascript
Jquery中使用show()与hide()方法动画显示和隐藏图片
2015/10/08 Javascript
js调用webservice构造SOAP进行身份验证
2016/04/27 Javascript
微信小程序 欢迎界面开发的实例详解
2016/11/30 Javascript
JS实现图片高斯模糊切换效果的焦点图实例
2017/01/21 Javascript
zTree异步加载展开第一级节点的实现方法
2017/09/05 Javascript
JavaScript设计模式之观察者模式(发布订阅模式)原理与实现方法示例
2018/07/27 Javascript
Angular CLI 使用教程指南参考小结
2019/04/10 Javascript
layui 实现表格某一列显示图标
2019/09/19 Javascript
layui文件上传控件带更改后数据传值的方法
2019/09/23 Javascript
在vue和element-ui的table中实现分页复选功能
2019/12/04 Javascript
vue中后端做Excel导出功能返回数据流前端的处理操作
2020/09/08 Javascript
适用于 Vue 的播放器组件Vue-Video-Player操作
2020/11/16 Javascript
[06:21]完美世界亚洲区首席发行官竺琦TI3采访
2013/08/26 DOTA
Python实现的密码强度检测器示例
2017/08/23 Python
Python实现随机选择元素功能
2017/09/14 Python
django传值给模板, 再用JS接收并进行操作的实例
2018/05/28 Python
TensorFlow 滑动平均的示例代码
2018/06/19 Python
Python中断多重循环的思路总结
2019/10/04 Python
解决python 上传图片限制格式问题
2019/10/30 Python
ESDlife健康生活易:身体检查预订、搜寻及比较
2019/05/10 全球购物
保险公司晨会主持词
2014/03/22 职场文书
共产党员公开承诺践诺书
2014/05/28 职场文书
2014最新开业庆典策划方案(5篇)
2014/09/15 职场文书
大学军训通讯稿(2016最新版)
2015/12/21 职场文书
2016廉洁从业学习心得体会
2016/01/19 职场文书
学习商务礼仪心得体会
2016/01/22 职场文书
python实现的人脸识别打卡系统
2021/05/08 Python
python树莓派通过队列实现进程交互的程序分析
2021/07/04 Python