最近,我一直在致力于应用程序的应用,该应用程序允许用户创建html模板并通过复制代码来使用它。一切正常,但文件太大,约有300行html代码,很难保持某种顺序并迅速找到需要替换/修复的代码部分。我已经看过一些用于突出显示的javascript库,但是我不想要那样,我只想创建一些简单的基于php的文件供我使用。
到目前为止,我已经得到了:
<style>
body {
font-size:30px;
}
.div_tag {
color:blue;
}
.a_tag {
color:green;
}
</style>
<body>
<?php
ob_start();
include 'content.php';
$source = ob_get_contents();
ob_end_clean();
$all_lines = explode("\n", $source);
foreach($all_lines as $line) {
echo preg_replace(array(
'/<div>/',
'/<\/div>/',
'/<a>/',
'/<\/a>/',
'/ /',
'/ /'
), array(
'<span class="div_tag"><div></span>',
'<span class="div_tag"></div></span>',
'<span class="a_tag"><a></span>',
'<span class="a_tag"></a></span>',
' ',
' '
), $line) . '<br />';
}
?>
</body>
出于测试目的,content.php文件如下所示:
<div>
<div>
<a>Source</a>
</div>
</div>
现在,首先要解决的问题是,最重要的是,我想知道是否有一种方法可以处理制表符,因为我必须逐字输入4个空格而不是制表符,以使其看起来像是一行中的制表符,经典制表符没有被正确解析,它就消失了,在这种情况下没有制表符或空格是很成问题的。
我遇到的第二个问题是html标记,在这个基本示例中它可以正常工作,但是如果我做类似的事情<img src="sth" />
甚至<a href="sth">sth</a>
明显中断,我认为应该在regex中进行更准确的编码,但是由于我刚刚开始学习正则表达式,所以我不这样做知道如何处理。
现在,我只是准备<div>
和<a>
,但如果我知道如何使它更addaptable我将包括更喜欢<img>
,<span>
,<h1,2,3+>
,<p>
等等。
用正则表达式解析HTML是不正确的。您将不得不考虑很多情况,而PHP的regex引擎提供了对递归模式的支持,但是,对于HTML来说,这是一个滑坡。解释html属性的最简单情况是,开始标记或自动关闭标记的这种模式:
'/<(\w)+.*?\/?>/'
类似的方法也可以用于结束标签:
'/<\/(\w)+>/'
但是,在以下情况下,此操作将失败:
如果要解析html标记的内部html,直到看到其自己的结束标记,则需要使用递归模式。您可以使用对标签名称(\ w)的引用来查找结束标签。但这是地狱。即便如此,在将如此多的语言与HTML一起输出的情况下,有时即使具有最富有弹性的regex风格和最佳模式,您也将无法正确解析HTML。
但是,对于突出显示简单的HTML,上述操作即可。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句