我试图使用git diff --word-diff-regex =命令,它似乎拒绝任何类型的前瞻和外观。我无法确定正则表达式git使用的风格。例如
git diff --word-diff-regex='([.\w]+)(?!>)'
作为无效的正则表达式回来。
我正在尝试获取所有不是HTML标记的单词。所以正则表达式的结果匹配应该是“你好”。 '世界' '富' '酒吧'对于以下字符串
<p> Hello World </p><p> Foo Bar </p>
答案 0 :(得分:3)
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:]]
可能已经足够接近大多数用途了。)
答案 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:]
等。