我正在尝试使用 git diff --word-diff-regex= 命令,它似乎拒绝任何类型的先行和后行。我无法确定 git 使用的正则表达式的风格。例如
git diff --word-diff-regex='([.\w]+)(?!>)'
作为无效的正则表达式返回。
我正在尝试获取所有不是 HTML 标签的词。因此,对于以下字符串,正则表达式的结果匹配应该是 'Hello' 'World' 'Foo' 'Bar'
<p> Hello World </p><p> Foo Bar </p>
最佳答案
Git 源代码使用 regcomp
和 regexec
,它们由 POSIX 1003.2 定义。 code to compile a diff regexp是:
if (regcomp(ecbdata->diff_words->word_regex,
o->word_regex,
REG_EXTENDED | REG_NEWLINE))
这在 POSIX 中意味着这些是定义的“扩展”正则表达式 here .
(并非每个 C 库实际上都实现了相同的 POSIX REG_EXTENDED
。Git 包含它自己的实现,可以构建它来代替系统的实现。)
编辑(根据更新的问题):POSIX ERE 既没有先行也没有后行,也没有 \w
(但是 [_[:alnum:]]
可能是对于大多数用途而言足够接近)。
关于regex - git 使用什么风格的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39789921/