php – preg_match_all html标记,但双引号或单引号中的标记除外
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – preg_match_all html标记,但双引号或单引号中的标记除外,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3021字,纯文字阅读大概需要5分钟。
内容图文
![php – preg_match_all html标记,但双引号或单引号中的标记除外](/upload/InfoBanner/zyjiaocheng/780/3a440a4dad1e4c8da1b831751616b8d7.jpg)
鉴于这个DOM
$html=<<<'EOD'
<div class='container clickable' data-param='{"footer":"<div>Bye</div>","info":"We win"}'>
<img src='a.jpg' />
</div>
<a href='a.html'>The A</a>
<span></span>
<span data-span-param='{"detailTag":"<span class=\"link\">Anything here</span>"}'>
<a></a>
</span>
EOD;
我正在尝试使用此表达式preg_match_all html标记:
$tags = array();
if(preg_match_all('~<\s*[\w]+[^>]*>|<\s*/\s*[\w]+\s*>~im',$html,$matchall,PREG_SET_ORDER)){
foreach($matchall as $m){
$tags[] = $m[0];
}
}
print_r($tags);
该表达式的输出是:
Array
(
[0] => < div class=’container clickable’ data-param='{“footer”:”< div>
[1] => < /div>
[2] => < img src=’a.jpg’ />
[3] => < /div>
[4] => < a href=’a.html’>
[5] => < /a>
[6] => < span>
[7] => < /span>
[8] => < span data-span-param='{“detailTag”:”< span class=\”link\”>
[9] => < /span>
[10] => < a>
[11] => < /a>
[12] => < /span>
)
我的预期输出是这样的:
Array
(
[0] => < div class=’container clickable’ data-param='{“footer”:”< div>Bye< /div>”,”info”:”We win”}’>
[1] => < img src=’a.jpg’ />
[2] => < /div>
[3] => < a href=’a.html’>
[4] => < /a>
[5] => < span>
[6] => < /span>
[7] => < span data-span-param='{“detailTag”:”< span class=\”link\”>Anything here< /span>”}’>
[8] => < a>
[9] => < /a>
[10] => < /span>
)
我需要一个表达式的帮助来解决这个问题.
解决方法:
这将匹配所有html标记,并且不会捕获用双引号或单引号括起来的标记
<?php
$html=<<<EOD
<div class='container clickable' data-param='{"footer"<div>Bye</div>","info":"We win"}'>
<img src='a.jpg' />
</div>
<a href='a.html'>The A</a>
<span></span>
<span data-span-param='{"detailTag":"<span class=\"link\">Anything here</span>"}'>
<a></a>
</span>
EOD;
$html = preg_replace('~\<\;~is','<',$html);
$html = preg_replace('~\>\;~is','>',$html);
//$html = preg_replace('~\"\;~is','"',$html);
$html = preg_replace('~=\s*\'\s*\'~is','=\'.\'',$html);
$html = preg_replace('~=\s*"\s*"~is','="."',$html);
if(preg_match_all('~((?<==\')(?:.(?!\'))*.)\'|((?<==")(?:.(?!"))*.)"~im',$html,$matchall,PREG_SET_ORDER)){
foreach($matchall as $m){
if(preg_match('~\<~is',$m[0],$mtch1)||preg_match('~\>~is',$m[0],$mtch2)){
$end = $m[0][(strlen($m[0])-1)];
$replace1 = substr($m[0],0,(strlen($m[0])-1));
$replace = preg_replace('~"~is','"',$replace1);
$replace = preg_replace('~<~is','<',$replace);
$replace = preg_replace('~>~is','>',$replace);
$html = preg_replace("~".preg_quote(($end.$replace1.$end),'~')."~is",$end.$replace.$end,$html);
}
}
}
$tags = array();
if(preg_match_all('~<\s*[\w]+[^>]*>|<\s*/\s*[\w]+\s*>~im',$html,$matchall,PREG_SET_ORDER)){
foreach($matchall as $m){
$tags[] = $m[0];
}
}
print_r($tags);
?>
输出:
Array
(
[0] => <div class='container clickable' data-param='{"footer":"<div>Bye</div>","info":"We win"}'>
[1] => <img src='a.jpg' />
[2] => </div>
[3] => <a href='a.html'>
[4] => </a>
[5] => <span>
[6] => </span>
[7] => <span data-span-param='{"detailTag":"<span class=\"link\">Anything here</span>"}'>
[8] => <a>
[9] => </a>
[10] => </span>
)
内容总结
以上是互联网集市为您收集整理的php – preg_match_all html标记,但双引号或单引号中的标记除外全部内容,希望文章能够帮你解决php – preg_match_all html标记,但双引号或单引号中的标记除外所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。