如何使用PCRE2实现/ e修饰符?

时间:2017-02-08 04:17:04

标签: c++ regex pcre

在Perl中,我们可以做到这一点

s/pattern/func($1)/e

有没有方便的功能与PCRE2做同样的事情,比如

::pcre2_substitute_with_callback(
    re, // the compiled pattern
    pcuSubject, ccuSubject, // the subject and its length
    PCRE2_SUBSTITUTE_GLOBAL, // the substitute options
    matches,
    NULL, // the match context
    [](PCRE2_SPTR pcuMatched)->PCRE2_SPTR{ // the callback
        return "replacement";
    },
    pcuResult, &ccuResult
);

感谢。

1 个答案:

答案 0 :(得分:3)

不,我认为pcre2没有这样的便利。请参阅下面的包装器。

但是,我相信可以准备调用pcre2_substitute的替换字符串而不受任何特殊限制。 (我现在无法测试。)明确指定使用转义字符($)来捕获组或模式项,但我不明白为什么不能在函数/回调中使用它来形成替换串。

然后可以将其包装在具有所需签名的方法中。

来自pcre2api的更多文档位于Creating a new string with substitutions

有一个C ++包装器JPCRE2。为此,它使用RegexReplace replace方法。但是,在主页的大约一半时间,它也会通知我们

  

还有另一个替换函数(jp::RegexReplace::nreplace()),它使MatchEvaluator具有回调函数。当你必须根据某些标准动态创建替换字符串时,这是必需的。

     

jp::MatchEvaluator实现了几个构造函数重载,以采用不同的回调函数。

该页面继续使用jp::RegexReplace::nreplace()的完整示例。

分发中的测试文件中提供了更详细的示例。