【问题标题】:How do I split words on punctuation in git diff?如何在 git diff 中拆分标点符号?
【发布时间】:2016-03-24 03:43:26
【问题描述】:

我对以下命令有点运气:

git diff --color-words='[^][<>()\{},.;:?/|\\=+*&^%$#@!~`"'\''[:space:]]+|[][<>(){},.;:?/|\\=+*&^%$#@!~`"'\'']'

但它似乎没有正确否定第一个字符类中的方括号。

我试过了:

git diff --color-words='[^\]\[<>()\{},.;:?/|\\=+*&^%#@!~`"'\''[:space:]]+|[\]\[<>(){},.;:?/|\\=+*&^%#@!~`"'\'']'

为了使方括号变成文字,但它失败并显示消息fatal: Invalid regular expression

编辑:

我得到的输出是这样的:

foobarfo]ob[ar

但我想要的是:

fo]oob[ar

【问题讨论】:

  • 你能展示一个差异样本和你的预期输出吗?

标签: regex git diff git-diff posix-ere


【解决方案1】:

尽管我最终不需要它,但要像我的示例一样查看字符级别的差异,这很有效:

git diff --color-words=.

【讨论】:

    【解决方案2】:

    使用单词 diff,您将始终在新单词旁边看到您删除的单词。

    这就是为什么你在新的变化之前有这个词。

    阅读这个问题,很详细的回答:

    Filtering a diff with a regular expression

    【讨论】:

    • 我明白这一点,但该正则表达式的目的是定义一个单词的组成部分。在这种情况下,它应该是一系列非空格和非标点字符,或单个标点字符。
    • 你是对的。它正在检测一个被更改“破坏”的单词。当标点符号更改在单词之外时,正则表达式会按预期工作。
    猜你喜欢
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    • 1970-01-01
    • 2017-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多