使用Python从HTML文件中删除PHP行

时间:2014-01-26 06:28:56

标签: python regex python-2.7 syntax

我被要求从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

我尝试了几种不同的方法来解决多线问题,但还没有任何工作。任何建议或见解都将非常感激。

4 个答案:

答案 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"