当前位置: 首页 > 知识库问答 >
问题:

preg_match_all html标记(双引号或单引号中的标记除外)

姜磊
2023-03-14

给定这个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);

此表达式的输出为:

数组
(
[0]=>


[3]=>

[4]=>
[5]=>
[6]=>
[7]=>

[8]=>
[2]=>
[3]=>[4]=>[5]=>
[6]=>
[7]=> 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','&gt;',$replace);" }="" $tags="array();" if(preg_match_all('~<\s*[\w]+[^>]*>|<\s*="" s*[\w]+\s*>~im',$html,$matchall,preg_set_order)){="" $tags[]="$m[0];" print_r($tags);="" ?>="" <="" ode="">

产出:

Array  
(  
[0] => <div class='container clickable' data-param='{&quot;footer&quot;:&quot;&lt;div&gt;Bye&lt;/div&gt;&quot;,&quot;info&quot;:&quot;We win&quot;}'>  
[1] => <img src='a.jpg' />  
[2] => </div>  
[3] => <a href='a.html'>  
[4] => </a>  
[5] => <span>  
[6] => </span>  
[7] => <span data-span-param='{&quot;detailTag&quot;:&quot;&lt;span class=\&quot;link\&quot;&gt;Anything here&lt;/span&gt;&quot;}'>  
[8] => <a>
[9] => </a>  
[10] => </span>  
)

暂时还没有答案

 类似资料:
  • 我需要在双引号内加粗。 当我把

  • 我有以下字符串。它是度、分、秒格式的LatLongs,可以按如下方式输入:

  • 问题内容: Python中的单引号与双引号 问题答案: 我喜欢在用于插值或自然语言消息的字符串周围使用双引号,对于像符号一样小的字符串使用单引号,但是如果字符串包含引号或者我忘记了,则会违反规则。我对文档字符串使用三重双引号,对正则表达式使用原始字符串文字,即使不需要它们也是如此。 例如:

  • 问题内容: 我的代码: 定义是错误的 定义是正确的 我听说在Python中 单 引号和 双 引号可以互换。谁能向我解释一下? 问题答案: JSON语法不是Python语法。JSON的字符串需要双引号。

  • 问题内容: 手动编写HTML时,我总是使用单引号。我使用很多渲染的HTML,这些HTML总是使用双引号。这使我可以确定HTML是手工编写的还是生成的。这是一个好主意吗? 两者有什么区别?我知道它们都可以工作,并且得到所有现代浏览器的支持,但是在不同情况下,一个实际上比另一个更好吗? 问题答案: W3组织说: 默认情况下,SGML要求使用双引号(ASCII十进制34)或单引号(ASCII十进制39)

  • 问题内容: 这实际上有什么区别? 这工作正常: 但以下操作无效: 这是为什么? 问题答案: 那是因为双引号被认为是标准的,而单引号却没有。这并不是真正针对JQuery,而是关于JSON标准。因此,无论使用JS工具包,您都应该期待相同的行为。 值可以是带双引号的字符串,也可以是数字,也可以是true或false或null,或者是对象或数组。这些结构可以嵌套。