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

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

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

<div class="codebody" id="code84994">@H_404_2@<?PHP @H_4042@ /** @H4042@ * author: goosman @H4042@ * blog: http://blog.csdn.net/lgg201 @H4042@ * mail: lgg860911@yahoo.com.cn @H4042@ */ $str = '01234567890120123456789'; @H404_2@ function substr_remaintag($s,$o,$l) { @H404_2@ $is_match = preg_match_all(<<<heredoc #该正则表达式解析xml标签,标签属性内部支持转义符"\",支持对"\"自身和对应引号的转义 @H_404_2@ <(\w+) #标签开始 @H_404_2@ (?: #属性列表 @H_4042@ \s+ #前置空格 @H404_2@ \w+ #属性名 @H_404_2@ \s #属性名后的空白(为了兼容) @H_404_2@ = #属性名值之间的等号 @H_404_2@ \s #属性值前的空白(为了兼容) @H_404_2@ (?: #属性值(引号处理) @H_4042@ " #双引号的情况 @H4042@ (?: @H4042@ \\\\ #吃掉连续两个转义符(表示转义符自身) \\" #吃掉转义符接着一个引号(表示转义的引号) [^"\\]* #其他字符 @H4042@ )* @H4042@ " ' #单引号情况 @H4042@ (?: @H4042@ \\\\ #吃掉连续两个转义符(表示转义符自身) \\' #吃掉转义符接着一个引号(表示转义的引号) [^'\\]* #其他字符 @H4042@ )* @H4042@ ' @H4042@ ) @H4042@ )* @H4042@ > @H404_2@ .*? #标签内容 @H_404_2@ </(?1)> #结束标签 @H_4042@ ;x @H4042@ heredoc @H404_2@,$s,$matches,PREG_OFFSETCAPTURE,$o); @H404_2@ if ( $ismatch ) { @H4042@ foreach ( $matches[0] as $match ) { @H4042@ $o0 = $match[1]; @H404_2@ #标签左边界越过截取目标右边界,退出 @H_4042@ if ( $o0 >= $o + $l ) break; @H4042@ $l0 = strlen($match[0]); @H404_2@ #标签右边界在截取目标右边界内,继续 @H_404_2@ if ( $o0 + $l0 < $o + $l ) continue; #以下为标签跨边界处理 @H_4042@ $l = $o0 + $l0 - $o; @H4042@ break; @H4042@ } @H4042@ } @H4042@ return substr($s,$l); @H4042@ } @H4042@ echo $str . chr(10); @H404_2@ echo substr_remaintag($str,20) . chr(10); @H404_2@

猜你在找的PHP相关文章