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

php中文网
发布: 2016-07-25 09:05:41
原创
1173人浏览过
  1. /**
  2. * author: goosman
  3. * blog: http://blog.csdn.net/lgg201
  4. * mail: lgg860911@yahoo.com.cn
  5. */
  6. $str = '01234567890120123456789';
  7. function substr_remain_tag($s, $o, $l) {
  8. $is_match = preg_match_all( ;
  9. #该正则表达式解析xml标签, 标签属性内部支持转义符"", 支持对""自身和对应引号的转义
  10. (?: #属性列表
  11. s+ #前置空格
  12. w+ #属性名
  13. s* #属性名后的空白(为了兼容)
  14. = #属性名值之间的等号
  15. s* #属性值前的空白(为了兼容)
  16. (?: #属性值(引号处理)
  17. " #双引号的情况
  18. (?:
  19. \\\\ #吃掉连续两个转义符(表示转义符自身)
  20. |
  21. \\" #吃掉转义符接着一个引号(表示转义的引号)
  22. |
  23. [^"\\]* #其他字符
  24. )*
  25. "
  26. |
  27. ' #单引号情况
  28. (?:
  29. \\\\ #吃掉连续两个转义符(表示转义符自身)
  30. |
  31. \\' #吃掉转义符接着一个引号(表示转义的引号)
  32. |
  33. [^'\\]* #其他字符
  34. )*
  35. '
  36. )
  37. )*
  38. >
  39. .*? #标签内容
  40. (?1)> #结束标签
  41. ;x
  42. heredoc
  43. , $s, $matches, PREG_OFFSET_CAPTURE, $o);
  44. if ( $is_match ) {
  45. foreach ( $matches[0] as $match ) {
  46. $o0 = $match[1];
  47. #标签左边界越过截取目标右边界, 退出
  48. if ( $o0 >= $o + $l ) break;
  49. $l0 = strlen($match[0]);
  50. #标签右边界在截取目标右边界内, 继续
  51. if ( $o0 + $l0
  52. #以下为标签跨边界处理
  53. $l = $o0 + $l0 - $o;
  54. break;
  55. }
  56. }
  57. return substr($s, $o, $l);
  58. }
  59. echo $str . chr(10);
  60. echo substr_remain_tag($str, 0, 20) . chr(10);
复制代码


PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号