php截取字符串并保留完整xml標(biāo)簽的函數(shù)代碼
更新時(shí)間:2013年02月06日 17:41:07 作者:
截取字符串并保留完整xml標(biāo)簽的php代碼,有需要的朋友可以參考下
復(fù)制代碼 代碼如下:
<?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
#該正則表達(dá)式解析xml標(biāo)簽, 標(biāo)簽屬性?xún)?nèi)部支持轉(zhuǎn)義符"\", 支持對(duì)"\"自身和對(duì)應(yīng)引號(hào)的轉(zhuǎn)義
<(\w+) #標(biāo)簽開(kāi)始
(?: #屬性列表
\s+ #前置空格
\w+ #屬性名
\s* #屬性名后的空白(為了兼容)
= #屬性名值之間的等號(hào)
\s* #屬性值前的空白(為了兼容)
(?: #屬性值(引號(hào)處理)
" #雙引號(hào)的情況
(?:
\\\\\\\\ #吃掉連續(xù)兩個(gè)轉(zhuǎn)義符(表示轉(zhuǎn)義符自身)
\\\\" #吃掉轉(zhuǎn)義符接著一個(gè)引號(hào)(表示轉(zhuǎn)義的引號(hào))
[^"\\\\]* #其他字符
)*
"
' #單引號(hào)情況
(?:
\\\\\\\\ #吃掉連續(xù)兩個(gè)轉(zhuǎn)義符(表示轉(zhuǎn)義符自身)
\\\\' #吃掉轉(zhuǎn)義符接著一個(gè)引號(hào)(表示轉(zhuǎn)義的引號(hào))
[^'\\\\]* #其他字符
)*
'
)
)*
>
.*? #標(biāo)簽內(nèi)容
</(?1)> #結(jié)束標(biāo)簽
;x
heredoc
, $s, $matches, PREG_OFFSET_CAPTURE, $o);
if ( $is_match ) {
foreach ( $matches[0] as $match ) {
$o0 = $match[1];
#標(biāo)簽左邊界越過(guò)截取目標(biāo)右邊界, 退出
if ( $o0 >= $o + $l ) break;
$l0 = strlen($match[0]);
#標(biāo)簽右邊界在截取目標(biāo)右邊界內(nèi), 繼續(xù)
if ( $o0 + $l0 < $o + $l ) continue;
#以下為標(biāo)簽跨邊界處理
$l = $o0 + $l0 - $o;
break;
}
}
return substr($s, $o, $l);
}
echo $str . chr(10);
echo substr_remain_tag($str, 0, 20) . chr(10);
您可能感興趣的文章:
- php輸出xml格式字符串(用的這個(gè))
- PHP如何將XML轉(zhuǎn)成數(shù)組
- PHP生成和獲取XML格式數(shù)據(jù)的方法
- php實(shí)現(xiàn)的xml操作類(lèi)
- PHP讀取配置文件類(lèi)實(shí)例(可讀取ini,yaml,xml等)
- PHP生成json和xml類(lèi)型接口數(shù)據(jù)格式
- php使用simplexml_load_file加載XML文件并顯示XML的方法
- php實(shí)現(xiàn)將數(shù)組轉(zhuǎn)換為XML的方法
- php通過(guò)正則表達(dá)式記取數(shù)據(jù)來(lái)讀取xml的方法
- php+xml結(jié)合Ajax實(shí)現(xiàn)點(diǎn)贊功能完整實(shí)例
- PHP實(shí)現(xiàn)返回JSON和XML的類(lèi)分享
- php遍歷解析xml字符串的方法
相關(guān)文章
php中的Base62類(lèi)(適用于數(shù)值轉(zhuǎn)字符串)
以下是對(duì)php中Base62類(lèi)的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下2013-08-08PHP利用正則表達(dá)式將相對(duì)路徑轉(zhuǎn)成絕對(duì)路徑的方法示例
這篇文章主要介紹了PHP利用正則表達(dá)式將相對(duì)路徑轉(zhuǎn)成絕對(duì)路徑的方法,文中給出了詳細(xì)的示例代碼,大家可以整合成一個(gè)方法,在需要的地方調(diào)用,非常的不錯(cuò)。需要的朋友們下面來(lái)一起看看吧。2017-02-02php實(shí)現(xiàn)保存周期為1天的購(gòu)物車(chē)類(lèi)
這篇文章主要為大家詳細(xì)介紹了php實(shí)現(xiàn)保存周期為1天的購(gòu)物車(chē)類(lèi),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07Zend?Framework框架等常用php框架中存在的問(wèn)題
這篇文章主要介紹了Zend?Framework框架等常用php框架中存在的問(wèn)題2008-01-01php單元測(cè)試phpunit入門(mén)實(shí)例教程
這篇文章主要介紹了php單元測(cè)試phpunit,結(jié)合實(shí)例形式分析了php單元測(cè)試phpunit的基本概念、使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-11-11WordPress中用于創(chuàng)建以及獲取側(cè)邊欄的PHP函數(shù)講解
這篇文章主要介紹了WordPress中用于創(chuàng)建以及獲取側(cè)邊欄的PHP函數(shù)講解,分別為register_sidebar()函數(shù)和get_sidebar()的使用,需要的朋友可以參考下2015-12-12ThinkPHP使用心得分享-分頁(yè)類(lèi)Page的用法
ThinkPHP中的Page類(lèi)能輕松實(shí)現(xiàn)查詢(xún)內(nèi)容分頁(yè)的實(shí)現(xiàn),本文小總結(jié)了一下關(guān)于學(xué)習(xí)過(guò)程中對(duì)Page類(lèi)的使用方法。2014-05-05