boost 库中正则表达式的转义序列 \K

问题描述 投票:0回答:2

由于其局限性,我需要在 boost(版本 1.54)中将后视表达式替换为

\K
,但它不起作用。

我该怎么做或者有什么问题?

还有其他方法可以用lookahead转换这个表达式吗?

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

boost boost-regex regex-lookarounds lookbehind
2个回答
3
投票

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

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

foo.*\\K bar


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

rab (?=.*oof)

0
投票

我相信问题在于 Boost Lookbehind 模式必须是固定长度

您的表达式包含重复

.*
,这使其长度可变。

© www.soinside.com 2019 - 2024. All rights reserved.