ホームページ  >  記事  >  バックエンド開発  >  文字列をインターセプトし、完全な XML タグを保持する PHP コード

文字列をインターセプトし、完全な XML タグを保持する PHP コード

WBOY
WBOYオリジナル
2016-07-25 09:05:41885ブラウズ
  1. /**
  2. * 著者: goosman
  3. * ブログ: http://blog.csdn.net/lgg201
  4. * メール: 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. < ( w+) #タグの開始
  11. (?: #属性リスト
  12. s+ #先行スペース
  13. w+ #属性名
  14. s* #属性名の後の空白(互換性のため)
  15. = #属性名の値間の等号
  16. s* #属性値の前に空白 (互換性のため)
  17. (?: #属性値 (引用処理)
  18. " #二重引用符の状況
  19. (?:
  20. \\\\ #エスケープ文字を 2 つ連続して食べる (エスケープ記号そのものを示す)
  21. |
  22. \ \" #エスケープ文字の後に引用符を付けます (エスケープ引用符を表します)
  23. |
  24. [^"\\]* #その他の文字
  25. )*
  26. "
  27. |
  28. ' #単一引用符 Case
  29. (?:
  30. \\ \\ #2 つの連続したエスケープ文字を食べる (エスケープ文字自体を表す)
  31. |
  32. \\' #エスケープ文字の後に引用符を食べる (エスケープされた引用符を表す)
  33. [^'\\]* #その他の文字
  34. )*
  35. '
  36. )
  37. )*
  38. >
  39. .*? #タグの内容
  40. #終了タグ
  41. ;x
  42. ヒアドキュメント
  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 < $o + $l ) 続行
  52. #以下はラベルの境界を越えた処理です
  53. $l = $l0 - $o; return substr( $s , $o, $l);
  54. echo $str(10);
  55. コードをコピーします。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。