1

具体来说,我有一个名为 val 的字符串数组,并希望将"%{n}%"输入中的所有实例替换为val[n]. 更一般地说,我希望替换值是匹配值的函数。这是在 C++ 中,所以我选择了 Boost,但如果另一个常见的正则表达式库符合我的需求,最好让我知道。

我找到了一些 .NET (C#, VB.NET) 解决方案,但我不知道我是否可以在这里使用相同的方法(或者,如果可以,如何使用)。

我知道有一个丑陋的解决方案:有一个表单的表达式,"(%{0}%)|(%{1}%)..."然后有一个替换模式,如"(1?" + val[0] + ")(2?" + val[1] ... + ")".

但我想知道我正在尝试做的事情是否可以更优雅地完成。

谢谢!

4

1 回答 1

1

我不相信 boost::regex 有一个简单的方法来做到这一点。我能想到的最直接的方法是使用“(%{[0-9]+}%)”模式进行 regex_search,然后遍历返回的 match_results 对象中的子匹配项。您需要通过将每个匹配项之间的文本(match_results::position 方法在这里是您的朋友)与将子匹配项转换为 val 数组中的值的结果连接起来来构建一个新字符串。

于 2009-11-09T21:25:09.137 回答