Perl正则表达式查找和替换php多行注释

Perl正则表达式查找和替换php多行注释,php,javascript,regex,perl,Php,Javascript,Regex,Perl,我试图找到一种方法,通过删除所有的单行和多行注释来缩减我的PHP/JavaScript代码。目前,我有单行删除工作,但我不能想出如何使我的多行评论删除。我尝试了以下正则表达式: \/\*[^\*\/]*\*\/ \/\*[^.\/]*\*\/ 还有很多其他的。我当前用于查找单行而未能查找多行的表达式是(\/\/[^\n]*\n\/\*[^\*\/]*\*\/]) 表达要求 表达式必须是Perl语言 表达式不得在多行注释(即)内的/处停止 表达式必须能够找到单行和多行注释 表达式可用于查找任何

我试图找到一种方法,通过删除所有的单行和多行注释来缩减我的PHP/JavaScript代码。目前,我有单行删除工作,但我不能想出如何使我的多行评论删除。我尝试了以下正则表达式:

\/\*[^\*\/]*\*\/
\/\*[^.\/]*\*\/
还有很多其他的。我当前用于查找单行而未能查找多行的表达式是
(\/\/[^\n]*\n\/\*[^\*\/]*\*\/])

表达要求
  • 表达式必须是Perl语言
  • 表达式不得在多行注释(即)内的
    /
    处停止
  • 表达式必须能够找到单行和多行注释
  • 表达式可用于查找任何多行PHP/JavaScript注释的开头和结尾
一个你可以测试的代码样本,我需要它

提前谢谢你。

你不能让它单独和一个点一起工作。这不包括换行符

您需要使用/s选项。

\/\*[\s\S]*?\*\/
你不能让它单独和一个点一起工作。这不包括换行符

您需要使用/s选项

\/\*[\s\S]*?\*\/
  • \/\*
    匹配
    /*
  • [\s\s]*?
    匹配任何内容(非贪婪)
  • 直到
    \*\/
    ;匹配
    */
  • \/\*
    匹配
    /*
  • [\s\s]*?
    匹配任何内容(非贪婪)
  • 直到
    \*\/
    ;匹配
    */
有一个在线版本提供了以下perl正则表达式

(?:\/\*(?:[^*]|(?:\*+[^*\/]))*\*+\/)|(?:\/\/.*)
而且它似乎给出了正确的输出。但是您可能会在第10行这样的文本中遇到麻烦,其中在其他元素中有注释。

有一个在线版本提供了以下perl正则表达式

(?:\/\*(?:[^*]|(?:\*+[^*\/]))*\*+\/)|(?:\/\/.*)

而且它似乎给出了正确的输出。但是,如果第10行中的文本在其他元素中有注释,您可能会遇到麻烦。

为什么要这样做?在推送新版本时收缩源代码。在包含
$(function()的行之后{
,有一个
/**
似乎不合适?您的单行正则表达式也不能正常工作,因为它将匹配非注释的URL,并且将匹配字符串文本中的
/
。@Jerry不。它实际上是正确的。如果您注意socket.onclose右括号,则会有一个注释更接近。您为什么要这样做呢推送新版本时收缩源代码。在包含
$(function()的行之后{
,有一个
/**
似乎不合适?您的单行正则表达式也不能正常工作,因为它将匹配非注释的URL,并且将匹配字符串文本中的
/
。@Jerry不。它实际上是正确的。如果您注意socket.onclose右括号,则有一个注释闭合符。我为什么不使用
[.]*?
启用dotall?更好吗?@Mic1780我写的东西不需要那么容易解释的任何标志。当然你可以使用dotall方法。禁用dotall后,你可以轻松地将这个regexp与另一个匹配到行尾的regexp组合起来,以捕获
/
注释。为什么我不使用
[。]*启用dotall后?
更好吗?\s\s?@Mic1780我写的东西不需要任何易于解释的标志。当然,您可以使用dotall方法。禁用dotall后,您可以轻松地将此regexp与另一个匹配到行尾的regexp组合,以捕获
/
注释