您当前位置:成都网站制作 >> 新闻频道 >> 网络动态 >> 浏览文章
 

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

发布时间:2013年02月07日 来源:www.scgc.net   作者:成都网站制作 
收藏到:
复制代码 代码如下:
<?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);
相关阅读:

下一篇:DataGrid使用心得调用及连接数据库等等
上一篇:Android 创建验证删除桌面快捷方式已测试可用
  1. 冠辰 | 关于我们 | 网站建设 | 网站优化 | 整合营销 | 代理产品 | 成功案例 | 热门关键词| 联系我们
  2. 地址:四川省成都营门口路439号幸福丽景B座306室
  1. 四川冠辰科技开发有限公司www.scgc.net 版权所有 · 2013, All Rights Reserved.