regex - git 使用什么风格的正则表达式

标签 regex git git-diff

我正在尝试使用 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 源代码使用 regcompregexec,它们由 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/

相关文章:

ruby - system ("git push 2>&1") 工作正常,但 %x(git push 2>&1) 挂起。为什么?

Git:如何获取用于测试的 pull 请求

git - 了解 Git merge

git - Git列出自特定提交以来已修改(未添加)的所有文件,包括已添加并随后修改的文件

regex - 替换文件中的文本+可选换行符

regex - 使用 OR 正则表达式删除过多的破折号

regex - 从帖子中提取网址

Python 3.6 返回与预期不同的结果

git - 比较强制推送的 GitHub pull 请求的新旧版本

windows - Git diff 在路径中带有下划线的文件上失败