git使用什么样的正则表达式

Pap*_*000 7 regex git git-diff

我正在尝试使用git diff --word-diff-regex =命令,它似乎拒绝任何类型的前瞻和外观.我无法确定正则表达式git使用的风格.例如

git diff --word-diff-regex='([.\w]+)(?!>)'
Run Code Online (Sandbox Code Playgroud)

作为无效的正则表达式返回.

我试图得到所有不是HTML标签的单词.因此,正则表达式的结果匹配应该是以下字符串的'Hello''World''Foo''Bar'

<p> Hello World </p><p> Foo Bar </p>
Run Code Online (Sandbox Code Playgroud)

tor*_*rek 7

Git 源使用regcompregexec,由 POSIX 1003.2 定义。编译差异正则表达式代码是:

            if (regcomp(ecbdata->diff_words->word_regex,
                        o->word_regex,
                        REG_EXTENDED | REG_NEWLINE))
Run Code Online (Sandbox Code Playgroud)

这在 POSIX 中意味着这些是此处定义的“扩展”正则表达式。

(并不是每个 C 库实际上都实现了相同的 POSIX REG_EXTENDED。Git 包括它自己的实现,它可以代替系统的实现。)

编辑(根据更新的问题):POSIX ERE 既没有前瞻也没有后视,也没有\w(但[_[:alnum:]]对于大多数用途来说可能足够接近)。

  • @RayLuo:太多了,无法让它们保持完整,但幸运的是有相关网站。请参阅[此问题](/sf/ask/225842781/)及其链接,包括[regular-expressions.info](http://www.regular-expressions.info/refflavors.html)和[维基百科](https://en.wikipedia.org/wiki/Comparison_of_regular-expression_engines)。我想我更喜欢[这个维基百科页面](https://en.wikipedia.org/wiki/Regular_expression)。 (2认同)