采用以下正则表达式:
(?<=(<|<)ref)
这将导致QRegularExpression::isValid();
和QRegularExpression::errorString();
输出
lookbehind断言不是固定长度
现在显然并非所有的正则表达式引擎都有这个限制,但显然这个有。
也许这有针对正则表达式的解决方法?如果没有,使用Qt框架实现此功能的最佳和最干净的策略是什么?
答案 0 :(得分:1)
由于您使用的是PCRE引擎,因此内部模式的长度不固定。替代品可能具有不同的长度但即使它们的长度也已知(固定),也不能具有嵌套的交替组。
因此,您的(?<=(<|<)ref)
可以写为(?<=<ref|<ref)
。但是,此处更灵活的解决方案是使用\K
:(?:<|<)ref\K
。在这里,nin-capture组将匹配<
或<
,然后在匹配ref
后,所有匹配的文本都将被清除。