我被要求从html文件中删除PHP。我相信我可以使用Python自动化这个过程,但我仍然坚持使用多行PHP代码。下面是PHP代码的示例。
<?php
$seg = $this->uri->segment(2);
$active_2 = '';$active_1 = '';$active_4 = ''; $active_3 = '';
if($seg == "Enrichment"){
$active_1 = 'class="active"';
}
elseif($seg == "Nightlife"){
$active_2 = 'class="active"';
}
elseif($seg == "Misc"){
$active_3 = 'class="active"';
}
else $active_4 = 'class="active"';
?>
<a class="" href="<?php echo base_url()?>"><div class="logo">Page Name</div></a>
<li><a href="<?php echo base_url()?>category/all" <?php echo $active_4?> onClick="_gaq.push(['_trackEvent','categories','All'])">All</a>
这是我的代码。如您所见,我不处理多行出现。我已经设法自己提取所有其他PHP事件,所以我已经有了这个。
with open('C:/Users/B/Documents/Python(s)/aaa_phpshit/top_header.php', 'r') as php_file:
for line in php_file:
while line.find("<?php") > 0:
if "<?php" in line.lower() and "?>" in line:
line = line.replace(line[line.find("<?php"):line.find("?>")+len("?>")].strip(), "")
else:
break
print line
我尝试了几种不同的方法来解决多线问题,但还没有任何工作。任何建议或见解都将非常感激。
答案 0 :(得分:1)
不是最有效的例子,但是给你一个开始:
k = 0
x = 0
ln = len(html)
ret = ''
while True:
if html[x:x + 5] == '<?php':
ret = '%s%s' % (ret, html[k:x])
k = x
x += 4
if html[x:x + 2] == '?>':
k = x + 2
x += 1
if x >= ln:
ret = '%s%s' % (ret, html[k:])
break
print(ret)
显然,您的源代码是html var。请注意,不检查错误:如果您忘记关闭php标记,结果与您的html / php源错误
答案 1 :(得分:1)
您不必逐行执行此操作。正则表达式真的值得研究:))
import re
php_file = open(filename, 'r').read()
html = re.sub('<\?.*?\?>', '', php_file, re.MULTILINE)
请注意regexp中的lazy syntax(即非贪婪)
答案 2 :(得分:1)
最好的方法是使用RE
示例:强> 的
import re
with open('php_file.txt', 'r') as f:
html = re.sub('<\?.*?\?>', '', f.read(), re.MULTILINE)
with open('html_file.txt', 'w') as f:
f.write(html)
答案 3 :(得分:0)
这是我用来完成任务的确切代码。感谢SO用户的帮助。希望有一天这个问题/代码可以帮助别人。
import os
import re
dir_list = ['views/templates','views/pages']
for dir in dir_list:
for file in os.listdir('C:/Users/B/Documents/Python(s)/application/'+dir):
if file.endswith(".php"):
with open('C:/Users/B/Documents/Python(s)/application/'+dir+'/' + file, 'r') as f:
html = f.read()
php_compile = re.compile("<\?.*?\?>", re.DOTALL)
html = re.sub(php_compile, '', html)
with open('C:/Users/B/Documents/Python(s)/application/'+dir+'/' + file, 'w') as f:
f.write(html)
else:
print "dir name: ", dir
print "\nfile name: ", file, "\n"