【问题标题】:Regex php multiline comment (Meld)正则表达式 php 多行注释(融合)
【发布时间】:2017-03-12 02:52:31
【问题描述】:

我需要区分同一应用的两个不同版本。 这些文件使用许可证进行签名,并且该许可证已更改。

我不希望包含仅许可证差异的文件被签名为不同的。

我使用Meld 作为差异软件,它允许使用正则表达式。

<?php
/**
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the License ....
 *
 */

有类似的问题,但没有一个对我有用:

  1. RegEx to remove /** */ and // ** **// php comments

  2. How can I perform a diff that ignores all comments?

正则表达式尝试:

\/\*.*?\*\/|\/\/.*?\n
~//?\s*\*[\s\S]*?\*\s*//?~

实际上这个看起来可行,但我不确定它过滤太多:

\*.*

更新:
这不可能: https://mail.gnome.org/archives/meld-list/2011-December/msg00004.html

而 Meld 中的过滤器代码 会很乐意接受一个覆盖(并删除)多行的正则表达式, 这会导致 diff 看到的文本与 我们显示的文本,所以所有的更改块都是错误的。

不同的方法是在将文件处理成meld之前从文件中删除这些行。

【问题讨论】:

  • 你能说出你尝试的具体模式吗?
  • 请先尝试一些简单的正则表达式,看看它是否有效,例如\d+ 来匹配数字。
  • 我试过了,它工作正常(例如,如果许可证在一侧显示 2006,在另一侧显示 2009,这不算作差异)
  • @rock321987 我很不擅长正则表达式,我一直忘记它们......我已经尝试过上述答案中的模式,但没有任何运气(我会将它们添加到问题中)
  • 在融合中按“Ctrl+H”并使用此正则表达式:- (?s)/\*(.*?)\*//\*([\S\s]*?)\*/

标签: php regex diff meld


【解决方案1】:
\s*\/\*.*|\s*\*.*

显然,meld 不接受所有 python 正则表达式作为文本过滤器,没有多行也没有“|”括号内。 因此,此解决方案不包括以星号开头的行和带有可选空格的“/*”。它不会精确地过滤掉所有 php cmets,但可能适用于您的文件。

还可以看看: https://mail.gnome.org/archives/meld-list/2011-December/msg00004.html

【讨论】:

    【解决方案2】:

    这个正则表达式更容易用于多行:

      .*\/\*[^\/]+\/\s
    

    【讨论】:

    • 你用 Meld diff 程序试过了吗?
    猜你喜欢
    • 2014-01-29
    • 2011-01-28
    • 1970-01-01
    • 2011-08-19
    • 2010-11-14
    • 2016-07-20
    • 2019-12-25
    • 2011-02-04
    相关资源
    最近更新 更多