【问题标题】:Perl regex to find and replace php multiline commentsPerl 正则表达式查找和替换 php 多行注释
【发布时间】:2013-08-22 21:32:50
【问题描述】:

我正在尝试通过删除所有单行和多行 cmets 来缩小我的 PHP/JavaScript 代码。目前我有单行删除工作,但我不知道如何删除我的多行 cmets。我尝试了以下正则表达式:

\/\*[^\*\/]*\*\/
\/\*[^.\/]*\*\/

还有很多其他的。我用来查找单行和多行失败的当前表达式是(\/\/[^\n]*\n|\/\*[^\*\/]*\*\/)

表达要求

  • 表达式必须在 Perl 中
  • 表达式不得在多行注释内的// 处停止(即http://url.com)
  • 表达式必须能够找到单行和多行 cmets
  • 该表达式可用于查找任何多行 PHP/JavaScript 注释的开头和结尾。

您可以测试我需要它的代码示例可以是found here

提前谢谢你。

【问题讨论】:

  • 你为什么要这样做?
  • 在推送新版本时压缩源代码。
  • 在包含$(function(){ 的那一行之后,还有/** 似乎格格不入?
  • 你的单行正则表达式也不能正常工作,因为它会匹配不是 cmets 的 URL,并且会匹配字符串文本中的 //。
  • @Jerry 不,实际上是正确的。如果您照顾 socket.onclose 右大括号,则会有一个更接近的评论。

标签: php javascript regex perl


【解决方案1】:

有一个在线的guide 提供以下 perl 正则表达式。

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

您的test code 似乎给出了正确的输出。但是你可能会遇到像第 10 行这样的文本,其中其他元素中有 cmets。

【讨论】:

    【解决方案2】:
    \/\*[\s\S]*?\*\/
    
    • \/\*匹配/*
    • [\s\S]*? 匹配任何东西(非贪婪)
    • 直到\*\/;匹配*/

    【讨论】:

    • 我为什么不使用[.]*? 和dotall? \s\S 更好吗?
    • @Mic1780 我写的不需要任何标志,因此更容易解释。当然你可以使用 dotall 方法。关闭 dotall 后,您可以轻松地将此正则表达式与匹配到行尾的另一个正则表达式结合起来,以捕获 // cmets
    【解决方案3】:

    http://www.perl.com/pub/2003/06/06/regexps.html

    你不会让它单独使用一个点。这不包括换行符。

    您将需要使用 /s 选项。

    【讨论】:

      猜你喜欢
      • 2012-05-18
      • 1970-01-01
      • 1970-01-01
      • 2016-10-29
      • 2011-06-16
      • 1970-01-01
      • 2017-08-28
      • 1970-01-01
      • 2011-10-28
      相关资源
      最近更新 更多