【发布时间】:2025-12-13 01:40:01
【问题描述】:
你好,我正在编写一个 java 程序来从包含 php 源代码的字符串中删除所有注释,任何人都可以给我 php 注释的正则表达式吗?请
【问题讨论】:
你好,我正在编写一个 java 程序来从包含 php 源代码的字符串中删除所有注释,任何人都可以给我 php 注释的正则表达式吗?请
【问题讨论】:
看看这个链接: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。更新了答案。
$s = "<script>/* @cc_on */...</script>";
<?php # echo 'simple';?>,如php.net/manual/en/language.basic-syntax.comments.php中列出的示例
就像 Spudley 所说,您不能简单地编写一个正则表达式来执行此操作。异常情况太多了,比如字符串中的类似注释的字符串,以及通过关闭 PHP 标记提前终止的行 cmets。为了保证正确性,您可能不得不编写一个完整的语言解析器。
然而,如果您愿意使用 PHP 本身来为您进行过滤,this question 有所有答案,而且它应该更容易和更健壮。如果您将 PHP 与 Java 应用程序安装在同一台机器上,则可以使用 Runtime.exec() 运行 PHP 并获取控制台输出,或者将 PHP 导出到文件并稍后将其导入到您的程序中。
【讨论】:
这将非常棘手!
首先,您在 PHP 中有三种类型的注释:/* ... */,还有// 和#。
但是您需要排除那些属于字符串的部分,特别是因为// 可以经常出现在字符串中,作为转义的斜杠字符,并且字符串中的# 字符可能是完全合法的部分文本。
为了解决这个问题,字符串可以是多行的,除了单引号和双引号之外,它们还可以使用 Heredoc 和 Nowdoc 语法编写(参见http://php.net/manual/en/language.types.string.php),这可能特别难以挑选用正则表达式准确。另外,当然,您需要确保您在 <?php ... ?> 标记内。
这可能是可以做到的,但老实说,我想说的是,如果要处理所有这些问题,那么使用语言解析器比使用正则表达式要好得多。
【讨论】: