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

时间:2016-09-30 10:57:40

标签: regex git git-diff

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

git diff --word-diff-regex='([.\w]+)(?!>)'

作为无效的正则表达式回来。

我正在尝试获取所有不是HTML标记的单词。所以正则表达式的结果匹配应该是“你好”。 '世界' '富' '酒吧'对于以下字符串

<p> Hello World </p><p> Foo Bar </p>

2 个答案:

答案 0 :(得分:3)

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:]]可能已经足够接近大多数用途了。)

答案 1 :(得分:0)

感谢@torek上面回答的提示,现在我意识到这里有different flavors of regular expression engines,它们甚至可能具有不同的语法。

即使对于一个特定的程序(例如git),也可以使用其他正则表达式引擎进行编译。例如,this blog post暗示git将支持\w,这与我在计算机上观察到的内容或此处的OP要求相抵触。

我发现this section from your recommended wikipedia page最有帮助,因为它在一个表中显示了不同的语法,因此我可以在[:alnum:]\w,{ {1}}和[:digit:]\d[:space:]等。