regex - "diff"工具的正则表达式风格似乎缺乏?

标签 regex diff

我有两个文件一直在尝试与 diff 进行比较。这些文件是自动生成的,并具有许多如下所示的行:

//!   Generated Date  : Mon, 14, Dec 2009

我希望忽略这些差异,并开始使用“-I REGEX”标志来实现这一点。

然而,“Date”和冒号之间出现的空格数量各不相同,不幸的是,diff 使用的正则表达式的风格似乎缺少许多基本的正则表达式实用程序。

例如,我一生都无法让“一个或多个”加号起作用。同样处理空白的“\s”表示。
diff -I '.*Generated Date\s+:.*' ....


diff -I '.*Generated Date +:.*' ....

两者都失败了。

与其继续盲目地尝试,有人能指出我对正则表达式特定于差异的子集的一个很好的引用吗?

谢谢!

====== 编辑 ========

感谢 FalseVinylShrub,我已经确定我应该转义我的 '+' 和任何类似的字符。这在一定程度上解决了问题。 Diff 成功匹配
.*Generated Date \+.*


.*Generated Date  *.*

(注意“日期”和“*”之间有两个空格。)

但是,第二个我尝试将 ':' 添加到该表达式中,如下所示:
.*Generated Date \+:.*


.*Generated Date \+\:.*

两个版本都无法匹配有问题的字符串,并导致 diff 需要更多的时间来运行。有什么想法吗?

最佳答案

非常有趣...我找不到文档引用,但经过一些实验发现:

  • ␠*.*如果零个或多个适合您,则工作
  • 正如你所说,␠+不起作用。 ␠{1,}也没有... 但是 ␠\{1,\} 成功了
  • 更新:␠\+也有效!

  • ( 表示未显示的空格字符)。

    我正在使用来自 GNU diffutils 2.8.1 的 GNU diff。
    man diffinfo diff没有解释 RE 语法。

    希望这会有所帮助。

    更新:我在 man grep 中找到了一个简短的部分:

    Basic vs Extended Regular Expressions

    In basic regular expressions the meta-characters ?, +, {, |, (, and ) lose their special meaning; instead use the backslashed versions \?, \+, \{, \|, \(, and \).



    所以我猜它使用的是基本正则表达式语法。

    关于regex - "diff"工具的正则表达式风格似乎缺乏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2072167/

    相关文章:

    .net - 适用于紧凑型框架/手机 7 的最快二进制差异编码器/解码器

    algorithm - 是否有类似 diff 的算法来处理移动的行 block ?

    PHP Regex 在任意数量的单词和 1-3 位数字之后正确语法 preg_split

    python - 删除部分路径

    javascript - 你如何通过 phantomjs 访问页面的未更改源

    regex - 从 diff 生成正则表达式

    pdf - 在 Mac 上使用 Preview,为什么不做任何更改而简单地保存 PDF 会完全改变文件的内容?

    Java 正则表达式字符串解析,试图找出一种模式

    android - 查找重复数字的正则表达式不起作用

    Java 正则表达式跳过匹配