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

前端之家收集整理的这篇文章主要介绍了php截取字符串并保留完整xml标签的函数代码前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

<div class="codetitle">@H_502_0@<a style="CURSOR: pointer" data="84994" class="copybut" id="copybut84994" onclick="doCopy('code84994')"> 代码如下:

<div class="codebody" id="code84994">
<?PHP
/*
author: goosman
blog: http://blog.csdn.net/lgg201
mail: lgg860911@yahoo.com.cn
/ $str = '01234567890120123456789';
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,$l);
}
echo $str . chr(10);
echo substr_remain_tag($str,20) . chr(10);

原文链接:https://www.f2er.com/php/26767.html

猜你在找的PHP相关文章