Regex jq 1.6/oniguruma 5.9.6;正则表达式失败:查找后面”中的模式无效;错误 问题

Regex jq 1.6/oniguruma 5.9.6;正则表达式失败:查找后面”中的模式无效;错误 问题,regex,jq,pcre,regex-lookarounds,negative-lookbehind,Regex,Jq,Pcre,Regex Lookarounds,Negative Lookbehind,我试图使用一个带有正则表达式的jqv1.6过滤器,该过滤器包含一个负的向后看表达式和负的向前看表达式,但是它们失败了regex failure:look behind中的无效模式,即使规范看起来是一个有效的表达式 我使用的命令是 $ jq -n '("baz", "foo baz", "bla baz", "baz bars") | test("(?<!foo |bars )baz(?! foo| b

我试图使用一个带有正则表达式的
jqv1.6
过滤器,该过滤器包含一个负的向后看表达式和负的向前看表达式,但是它们失败了
regex failure:look behind
中的无效模式,即使规范看起来是一个有效的表达式

我使用的命令是

$ jq -n '("baz", "foo baz", "bla baz", "baz bars") | test("(?<!foo |bars )baz(?! foo| bars)")'
jq: error (at <unknown>): Regex failure: invalid pattern in look-behind
唯一的区别是,look-behind表达式选项的宽度是固定的,但文档清楚地指出,顶级选项允许具有可变宽度

结论 似乎出于某种原因,
jq
的这个特定版本不支持(负)look-behind表达式中的可变宽度选项,尽管规范对此没有说明

注 我怀疑我安装的特定
jq
build出现了问题,因为如果我尝试在中运行regex示例,也会得到一个错误:

$ jq -n '("test", "TEst", "teST", "TEST") | test( "(?i)te(?-i)st" )'
jq: error (at <unknown>): Regex failure: invalid group name <>
$jq-n'(“test”、“test”、“test”、“test”)| test(“(-i)te(?-i)st”)'
jq:错误(at):正则表达式失败:组名无效

有人知道哪里可能出了问题吗?

如果您当前的库版本仅限于固定宽度的查找模式,您对此无能为力

在您的情况下,由于您使用的是消极的lookbehind,您可以不做任何更改,只需将lookbehind分成两部分:

(?<!foo )(?<!bars )baz(?! foo| bars)
^^^^^^^^^^^^^^^^^^^
(?
然后,您不必关心每个lookback必须检查多少字符

(?<!foo )(?<!bars )baz(?! foo| bars)
^^^^^^^^^^^^^^^^^^^