1

我需要在 C# 中解析 PHP 文件。基本上我需要 PHP 文件中的所有评论,并且我想使用谷歌翻译将所有评论翻译成另一种语言。

我目前正在使用正则表达式来做到这一点。但这是徒劳的。如果我解析“// 或 / ../ ”,我无法确定这两个是否位于字符串中。

比方说$i= " http://wwww.google.como " ;。我的正则表达式将其视为评论"//wwww.google.com " ;,而它不是评论。那么有人可以帮我吗?

是否已经构建了对我有很大帮助的东西,例如 php 解析器等?

4

2 回答 2

1

创建一个简单的 php 脚本,它接受一个 php 脚本文件名并使用它为您标记它token_get_all()

之后使用该输出(这是一个令牌流并且易于处理)

于 2013-06-13T03:11:43.100 回答
0

您可以使用一系列状态来代替正则表达式。例如(这是伪代码,您可以将其转换为您想要的任何语言):

布尔 isPHP = false
bool isMultiComment = false
布尔 isSingleComment = false
bool isSingleQuote = false
bool isDoubleQuote = false
字符串注释[]

for i := 0 -> phpcode.length()
    if !isPHP && (phpcode[i->5] == '<?php')然后
      isPHP = 真
   elseif isPHP && (phpcode[i->2] == '?>') then 
      isPHP = 假
   elseif isPHP && !(isSingleQuote || isDoubleQuote)
                && !(isSingleComment || isMultiComment)
                && (phpcode[i->2] == '/*')然后
      isMultiComment = true
      评论.add("");
   elseif isPHP && !(isSingleQuote || isDoubleQuote)
                && !(isSingleComment || isMultiComment)
                && (phpcode[i->2] == '//')然后
      isSingleComment = true
      评论.add("");
   elseif isPHP && isMultiComment
                && (phpcode[i->2] == '*/')然后
      isMultiComment = false
   elseif isPHP && isSingleComment
                && (phpcode[i->1] == '\n')然后
      isSingleComment = 假
   elseif isPHP && !(isSingleQuote || isDoubleQuote)
                && !(isSingleComment || isMultiComment)
                && (phpcode[i->1] == '"')然后
      isDoubleQuote = true
   elseif isPHP && isDoubleQuote
                && (phpcode[i->1] == '"')然后
      isDoubleQuote = 假
   elseif isPHP && (isSingleComment || isMultiComment) then
      评论[comments.count - 1] += phpcode[i]
于 2013-06-13T03:28:40.340 回答