regex Git word diff -如何不拆分某些单词?

carvr3hs  于 2022-11-18  发布在  Git
关注(0)|答案(1)|浏览(147)

我需要应用一个git word diff,将所有字符都视为单词 *,除了 * 被方括号括起来的情况。在这种情况下,我希望方括号中的所有字符(包括空格),包括括号本身以及它们所替换的内容都被视为完整的单词,这样就不会有任何东西被拆分。
根据文档,“--word-diff-regex=.将把每个字符当作一个单词[...]"。到目前为止一切都很好,但我还没有能够合并这与我的其他要求,从来没有打破括号等。
以下是问题的屏幕截图:

因为字母'e'同时出现在单词'The'和'future'中,所以它被重用,而没有被标记为更改。我相信这是使用正则表达式.的结果。然而,在结尾处,只有'possibility'中的字母's'被突出显示,而不是整个单词被替换,该正则表达式完成了预期的工作。
整个事情 * 应该 * 看起来像这样:

在这里,括号和它们所取代的内容都被视为内聚单元,而结尾的“可能性”一词仍然不是,这是完美的。
我尝试过各种各样的正则表达式,包括using XOR,但都没有用。我的猜测是,在我的许多尝试中,.“吞下”了我与之合并的任何限制表达式。我已经得到了上面的特定示例来处理[a-zA-Z0-9\[]]|\s|\\n|[^[:space:]],但我不知道为什么(regex noob),它在其他情况下也不起作用。
请记住,git uses“POSIX“扩展了”正则表达式,而不是PCRE或Perl兼容的正则表达式,例如,[:space:]而不是\s用于空格字符类。”

k5ifujac

k5ifujac1#

$ sh -x <<\EOD; rm -rf test
git init test; cd $_
echo The possibilities > test; git add .; git commit -m-
sed -i 's,The,[Our future],' test; git commit -am-
git show --oneline --word-diff-regex=.
git show --oneline --word-diff-regex='\[[^]]*\]?|.'
EOD
+ git init test
Initialized empty Git repository in /home/jthill/sandbox/test/test/.git/
+ cd test
+ echo The possibilities
+ git add .
+ git commit -m-
[master (root-commit) 06604d0] -
 1 file changed, 1 insertion(+)
 create mode 100644 test
+ sed -i 's,The,[Our future],' test
+ git commit -am-
[master 6728cd4] -
 1 file changed, 1 insertion(+), 1 deletion(-)
+ git show --oneline --word-diff-regex=.
6728cd4 (HEAD -> master) -
diff --git a/test b/test
index c6eb735..1187549 100644
--- a/test
+++ b/test
@@ -1 +1 @@
[-Th-]{+[Our futur+}e{+]+} possibilities
+ git show --oneline '--word-diff-regex=\[[^]]*\]?|.'
6728cd4 (HEAD -> master) -
diff --git a/test b/test
index c6eb735..1187549 100644
--- a/test
+++ b/test
@@ -1 +1 @@
[-The-]{+[Our future]+} possibilities

相关问题