在QRegularExpression中,绕过" lookbehind断言的最佳方法是固定长度"限制?

时间:2018-04-11 16:56:14

标签: c++ regex qt lookbehind qregularexpression

采用以下正则表达式:

(?<=(&lt;|<)ref)

这将导致QRegularExpression::isValid();QRegularExpression::errorString();输出

失败
  

lookbehind断言不是固定长度

现在显然并非所有的正则表达式引擎都有这个限制,但显然这个有。

也许这有针对正则表达式的解决方法?如果没有,使用Qt框架实现此功能的最佳和最干净的策略是什么?

1 个答案:

答案 0 :(得分:1)

由于您使用的是PCRE引擎,因此内部模式的长度不固定。替代品可能具有不同的长度但即使它们的长度也已知(固定),也不能具有嵌套的交替组。

因此,您的(?<=(&lt;|<)ref)可以写为(?<=&lt;ref|<ref)。但是,此处更灵活的解决方案是使用\K(?:&lt;|<)ref\K。在这里,nin-capture组将匹配&lt;<,然后在匹配ref后,所有匹配的文本都将被清除。