git 使用哪种正则表达式
What flavor of regex does git use
我正在尝试使用 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 源使用 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 中表示这些是 "extended" 定义的正则表达式 here.
(并非每个 C 库实际上都实现了相同的 POSIX REG_EXTENDED
。Git 包含其自己的实现,可以代替系统的实现。)
编辑(根据更新的问题):POSIX ERE 既没有先行也没有后行,也没有 \w
(但 [_[:alnum:]]
对于大多数用途来说可能足够接近)。
感谢上面@torek 的回答中的提示,现在我意识到有 different flavors of regular expression engines,它们甚至可以有不同的语法。
即使对于一个特定的程序,例如 git,它也可以使用不同的正则表达式引擎进行编译。例如,this blog post 暗示 \w
将得到 git 的支持,这与我从我的机器上观察到的或这里的 OP 询问的内容相矛盾。
我最终发现 this section from your recommended wikipedia page 最有帮助,就在一个 table 中呈现不同的语法而言,这样我就可以在 "translation" 之间做一些事情,例如 [:alnum:]
和 \w
、[:digit:]
和 \d
、[:space:]
和 \s
等。
我正在尝试使用 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 源使用 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 中表示这些是 "extended" 定义的正则表达式 here.
(并非每个 C 库实际上都实现了相同的 POSIX REG_EXTENDED
。Git 包含其自己的实现,可以代替系统的实现。)
编辑(根据更新的问题):POSIX ERE 既没有先行也没有后行,也没有 \w
(但 [_[:alnum:]]
对于大多数用途来说可能足够接近)。
感谢上面@torek 的回答中的提示,现在我意识到有 different flavors of regular expression engines,它们甚至可以有不同的语法。
即使对于一个特定的程序,例如 git,它也可以使用不同的正则表达式引擎进行编译。例如,this blog post 暗示 \w
将得到 git 的支持,这与我从我的机器上观察到的或这里的 OP 询问的内容相矛盾。
我最终发现 this section from your recommended wikipedia page 最有帮助,就在一个 table 中呈现不同的语法而言,这样我就可以在 "translation" 之间做一些事情,例如 [:alnum:]
和 \w
、[:digit:]
和 \d
、[:space:]
和 \s
等。