用boost regex替换字符串中的(key,value)

时间:2013-10-24 16:15:25

标签: c++ regex boost

我有一个字符串的地图(对的集合)我必须用字符串替换。

例如,如果我有地图{ {"foo", "foo2"}, {"bar", "bar2"} } 字符串"foo barman football bar"的最终结果应为:"foo2 bar2man foo2tball bar2"

已经有很多问题/答案,但没有一个提到这里最大的问题。如果地图有“圆形”替换{ {"foo", "bar"}, {"bar", "foo"} } 结果应该是:"bar fooman bartball foo"

另一个问题可能是{ {"foo", "fo"}, {"fo", "f"} }

算法应该只替换一次实例。

很抱歉没有提供SSCCE ......我仍然在寻找如何处理它。


选项1:

按密钥大小(降序)对地图进行排序 - 这将消除包含问题。

然后基于来自经典交换方法的想法。浏览地图并将所有出现的密钥替换为唯一的密钥。在我的情况下,?无法使用,?1用于第二个键的第一个键?2等。

现在在第二次传递时,将?1替换为值{1,?2,值为2等。

缺点:  1.您必须有简单的方法来定义与任何键或值不匹配的交换键。  2.似乎性能昂贵

选项2:

创建一般匹配模式((key1|key2|key3...)(.*?))*。 枚举匹配项并为每个键匹配替换键值。 重新生成结果。

缺点:  1.创建匹配树可能会耗费内存  2.准备一般模式可能很麻烦

0 个答案:

没有答案