【问题标题】:java regular expression for php commentphp注释的java正则表达式
【发布时间】:2025-12-13 01:40:01
【问题描述】:

你好,我正在编写一个 java 程序来从包含 php 源代码的字符串中删除所有注释,任何人都可以给我 php 注释的正则表达式吗?请

【问题讨论】:

    标签: java php regex


    【解决方案1】:

    看看这个链接:http://ostermiller.org/findcomment.html

    他得出了这个解决方案(对于/* ... */ cmets):

    sourcecode.replaceAll("/\\*(?:.|[\\n\\r])*?\\*/","");
    

    对于// ...# ... cmets,您应该能够执行类似的操作

    sourcecode.replaceAll("(//|#).*?[\\n\\r]");
    

    但请注意以下类型的情况:

    • someString = "An example comment: /* example */";

    • someString = "An example comment: // example";

    • someString = "An example comment: # example";

    【讨论】:

    • 这将既不修剪磅也不修剪双斜杠 cmets
    • 对。它适用于/* ... */ cmets。更新了答案。
    • PHP 允许您以# 符号开始评论。
    • 您在字符串中提到了 cmets。这些可能是合法且重要的,用于在 cmets 中编写包含条件编译指令的 javascript:$s = "<script>/* @cc_on */...</script>";
    • 还要注意<?php # echo 'simple';?>,如php.net/manual/en/language.basic-syntax.comments.php中列出的示例
    【解决方案2】:

    就像 Spudley 所说,您不能简单地编写一个正则表达式来执行此操作。异常情况太多了,比如字符串中的类似注释的字符串,以及通过关闭 PHP 标记提前终止的行 cmets。为了保证正确性,您可能不得不编写一个完整的语言解析器。

    然而,如果您愿意使用 PHP 本身来为您进行过滤,this question 有所有答案,而且它应该更容易和更健壮。如果您将 PHP 与 Java 应用程序安装在同一台机器上,则可以使用 Runtime.exec() 运行 PHP 并获取控制台输出,或者将 PHP 导出到文件并稍后将其导入到您的程序中。

    【讨论】:

      【解决方案3】:

      这将非常棘手!

      首先,您在 PHP 中有三种类型的注释:/* ... */,还有//#

      但是您需要排除那些属于字符串的部分,特别是因为// 可以经常出现在字符串中,作为转义的斜杠字符,并且字符串中的# 字符可能是完全合法的部分文本。

      为了解决这个问题,字符串可以是多行的,除了单引号和双引号之外,它们还可以使用 Heredoc 和 Nowdoc 语法编写(参见http://php.net/manual/en/language.types.string.php),这可能特别难以挑选用正则表达式准确。另外,当然,您需要确保您在 <?php ... ?> 标记内。

      这可能是可以做到的,但老实说,我想说的是,如果要处理所有这些问题,那么使用语言解析器比使用正则表达式要好得多。

      【讨论】: