由于其限制,我需要在 boost(1.54 版)中用 \K 替换后向表达式,但它不起作用。我该怎么做或有什么问题?有没有其他方法可以用前瞻来转换这个表达式?
"(?<=foo.*) bar" => "foo.*\K bar" ???
由于其限制,我需要在 boost(1.54 版)中用 \K 替换后向表达式,但它不起作用。我该怎么做或有什么问题?有没有其他方法可以用前瞻来转换这个表达式?
"(?<=foo.*) bar" => "foo.*\K bar" ???
这里的答案有点晚......
根据Boost.Regex 1.54 Documentation,使用 Perl 的 \K 是可能的,我刚刚通过在 Sublime Text 3 中的测试确认了这一点,它使用 Boost.Regex 作为其正则表达式搜索引擎。此外,我发现您发布的任何一种形式都没有明显的语法错误。我唯一能想到的是你在字符串文字中使用了正则表达式,并且没有逃脱 \. 如果是这种情况,您示例的正确正则表达式将是:
foo.*\\K bar
如果不是这种情况,一种解决方法(显然会影响性能)是反转字符串,然后使用可变宽度的前瞻。您的示例的修改后的正则表达式将是:
rab (?=.*oof)
我认为问题在于 Boost lookbehind模式必须是固定长度的。
您的表达式包含一个重复.*
,使其长度可变。