【发布时间】:2012-11-17 06:04:07
【问题描述】:
我有一个混合了 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>
我想在每个 PHP 和 HTML 标记处拆分,但保留引号或 cmets 中的任何 PHP 标记或 HTML 标记不变/忽略。这是我目前所拥有的:
$array = preg_split("/((^<\?php)|([^'|\"]<\?php)|([^'|\"]<\?)|([^'|\"]\?>)|(<\%)|(\%>))/i", $string, -1);
我遇到的问题是最终 $array 中缺少一些 HTML 右括号“>”。我想保持 HTML 打开和关闭标签完好无损。有时我会得到 p>
<p></p instead of <p></p>
应该是这样的:
[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>
只要 preg_split 不将它们视为任何分隔符并忽略其中任何一个,任何 cmets 都不需要是数组的一部分。
我也刚刚意识到一些 php 标签,尤其是在使用 eval() 时可能会像这样结束:
"?> <p>some HTML text</p> <?";
这意味着我的正则表达式中的引号将不匹配任何这些情况。
Preg_match() 可能是更好的选择,但不确定。
任何帮助都将不胜感激,因为我在正则表达式方面不是很聪明,而且在这一点上卡住了。
非常感谢:)
【问题讨论】:
-
THE PONY HE COMES! - 只有在这里情况更糟,因为您还试图解析 PHP 块...
标签: php regex preg-match preg-split