【发布时间】:2015-11-08 11:16:09
【问题描述】:
解决方案是由框架、工具还是其他任何东西表示都没有关系。这个问题很难解决,多年来我一直在与它作斗争。
我将举一个例子来更好地说明我在说什么。
文件1
<head>
<title>Fotografia Elenco Completo Filtri Professionali</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<META name="Language" content="it">
<META http-equiv="Revisit-After" content="2 days">
<style>
<!--
table.MsoNormalTable
{mso-style-parent:"";
font-size:10.0pt;
font-family:"Times New Roman"}
-->
</style>
</head>
文件2
<head>
<title>Militari</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="keywords" content="militari, ....">
<meta name="robots" content="INDEX, FOLLOW">
<meta name="Language" content="it">
<meta http-equiv="Revisit-After" content="2 days">
<meta name="Rating" content="General">
<link rel="stylesheet" type="text/css" href="./file/stile.css">
<script language="JavaScript">
文件 3
<head>
<title>Cinema - Recensioni e Trame di Film</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta name="keywords" content="recensioni film">
<meta name="description" content="Ottimo sito di recensioni di film, trame di film cinematografice, di Videogame e Romanzi. ">
<meta name="robots" content="INDEX, FOLLOW">
<meta name="Language" content="it">
<meta http-equiv="Revisit-After" content="2 days">
<meta name="Rating" content="General">
<link rel="stylesheet" type="text/css" href="file/stile.css">
<style type="text/css">
body {
background-color:#F0F0F0;
text-align: center;
}
</style>
对于人类来说,避免这种代码重复的任务是显而易见的。他能认出“”、“”是定界符。行的顺序无关紧要,哪些部分可以放入变量中(或作为值存储在数据库中)以及哪些文件足够相似可以重构。
整个过程似乎没有那么难自动化。但是..直到现在我找不到任何解决方案。甚至自动识别分隔符也很困难..
我发现最好的方法是玩正则表达式工具并变得疯狂:D
重构后
文件1
header -> PrintHeader();
文件2
header -> PrintHeader();
文件3
header -> PrintHeader();
全局文件
class header
{
function PrintHeader
{
SELECT title, content-type, language, revisit-after, rating, robots, extra_text_unparsed
into myArray
FROM header_table
WHERE filename = $filename
foreach(v in myArray)
{
echo ....
}
}
}
有什么建议吗?
【问题讨论】:
-
对于这个人来说,很难理解你的意思。您能否提供一个如何重构这三个文件的示例?
-
@venerik:已编辑。这并不容易。如果您愿意,我将使用 powergrep 发布最终解决方案,但它不是最聪明的工具...
标签: c# php regex code-duplication