如何用PCRE2实现/e修饰符

How to implement /e modifier with PCRE2?

本文关键字:何用 PCRE2 实现      更新时间:2023-10-16

在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
);

谢谢。

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

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

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

pcre2api的更多文档是创建一个带有替换的新字符串


有一个C++包装器JPCRE2。为此,它使用RegexReplace的replace方法。然而,在主页进行到一半时,它也通知我们

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

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

该页继续提供jp::RegexReplace::nreplace()的完整用法示例。

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