1

由于其限制,我需要在 boost(1.54 版)中用 \K 替换后向表达式,但它不起作用。我该怎么做或有什么问题?有没有其他方法可以用前瞻来转换这个表达式?

"(?<=foo.*) bar" => "foo.*\K bar" ???

4

2 回答 2

2

这里的答案有点晚......

根据Boost.Regex 1.54 Documentation,使用 Perl 的 \K 是可能的,我刚刚通过在 Sublime Text 3 中的测试确认了这一点,它使用 Boost.Regex 作为其正则表达式搜索引擎。此外,我发现您发布的任何一种形式都没有明显的语法错误。我唯一能想到的是你在字符串文字中使用了正则表达式,并且没有逃脱 \. 如果是这种情况,您示例的正确正则表达式将是:

foo.*\\K bar


如果不是这种情况,一种解决方法(显然会影响性能)是反转字符串,然后使用可变宽度的前瞻。您的示例的修改后的正则表达式将是:

rab (?=.*oof)
于 2014-02-10T03:14:48.287 回答
0

我认为问题在于 Boost lookbehind模式必须是固定长度的

您的表达式包含一个重复.*,使其长度可变。

于 2018-04-22T11:36:23.403 回答