<div class="codetitle"><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);
(编辑:安卓应用网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|