小编use*_*374的帖子

preg_split混合HTML和PHP标记,引号和注释除外

我有一个混有HTML的php页面.一些示例代码:

<?php echo "<p>some text</p>"; ?>/* <? some php in comments ?> */
<p>some HTML text</p> <!-- <h1>some HTML in comments</h1> -->
<? $header_info = <<<END 
\$some="<?php @ob_start(); @session_set_save_handler(); ?>";
END; ?>
<h2>Some more HTML</h2>
Run Code Online (Sandbox Code Playgroud)

我想在每个PHP和HTML标记处拆分,但保留/忽略引号或注释中的任何PHP标记或HTML标记.这是我到目前为止:

$array = preg_split("/((^<\?php)|([^'|\"]<\?php)|([^'|\"]<\?)|([^'|\"]\?>)|(<\%)|(\%>))/i", $string, -1);
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是最终的$数组中缺少一些HTML结束括号'>'.我想保持HTML打开和关闭标签完好无损.有时我最终会

<p></p instead of <p></p> 
Run Code Online (Sandbox Code Playgroud)

它应该如下所示:

[0] echo "<p>some text</p>";  
[1] <p>some HTML text</p> 
[2] $header_info = <<<END 
\$some="<?php @ob_start(); @session_set_save_handler(); ?>";
END; 
[3] <h2>Some more HTML</h2>
Run Code Online (Sandbox Code Playgroud)

只要preg_split没有将它们视为任何分隔符并忽略它们中的任何一个,任何注释都不需要成为数组的一部分.

我也刚刚意识到一些php标签,特别是在使用eval()时最终会像这样结束:

"?> <p>some HTML text</p> <?";
Run Code Online (Sandbox Code Playgroud)

这意味着我的正则表达式中的引用与任何这些情况都不匹配.

Preg_match()可能是一个更好的选择,但不确定.

任何帮助都会非常感激,因为我在正则表达方面并不是非常聪明,而是在这一点上陷入困​​境.

非常感谢 :)

php regex preg-match preg-split

5
推荐指数
1
解决办法
675
查看次数

标签 统计

php ×1

preg-match ×1

preg-split ×1

regex ×1