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)
Git 源使用regcomp和regexec,由 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:]]对于大多数用途来说可能足够接近)。