首页 理论教育 C++STL正则替换算法实现

C++STL正则替换算法实现

时间:2023-10-25 理论教育 版权反馈
【摘要】:正则替换算法regex_replace的声明形式如下:上述两种形式最复杂,功能也最复杂。若没有相关的匹配,并且的值为false,则调用copy。为true,调用copy,该处last_m是最后一个匹配的备份。如果flags&regex_constants::format_first_only是非零数值,仅仅第一个匹配被替换。上述两种形式的作用是构造一个空字符串,并调用regex_replace进行相应的替换工作。函数的返回值是一个字符串对象,该字符串代表结果序列。表17-9 flags的使用方法函数模板regex_replace()的使用方法参见例17-9。图17-7 例17-9的执行效果

C++STL正则替换算法实现

正则替换算法regex_replace的声明形式如下:

978-7-111-51399-5-Chapter17-60.jpg

978-7-111-51399-5-Chapter17-61.jpg

上述两种形式最复杂,功能也最复杂。其作用是构造一个迭代器对象i,并使用i来枚举match_result类型的所有匹配。这些匹配应该全部包含在序列[first,last]中。若没有相关的匹配,并且(flags&regex_constant::format_no_copy)的值为false,则调用copy(first,last,out)。若有任意匹配被发现,对于每个匹配而言,如果满足条件!(flags&regex_constants::format_no_copy),则调用std::copy(m.prefix().first,m.prefix().second,out);对于第一种形式,调用m.format(out,fmt,flags);对于第二种函数形式,调用m.format(out,fmt,fmt+char_traits<chart>::length(fmt),flags)。

最终,如果该匹配被发现,并且!(flags&regex_constants::format_no_copy)为true,调用copy(last_m.suffix().first,last_m.suffix().second,out),该处last_m是最后一个匹配的备份。如果flags&regex_constants::format_first_only是非零数值,仅仅第一个匹配被替换。

978-7-111-51399-5-Chapter17-62.jpg

上述两种形式的作用是构造一个空字符串,并调用regex_replace(back_inserter(result)、s.begin()和s.end()、e、fmt和flags)进行相应的替换工作。

978-7-111-51399-5-Chapter17-63.jpg

上述这两种形式的作用是构造一个空的string,并调用regex_replace(back_inserter(rusult),s,s+char_traits<charT>::length)。

函数的返回值是一个字符串对象,该字符串代表结果序列。(www.xing528.com)

参数fmt的使用方法见表17-6。参数flags的使用方法见表17-9。

17-9 flags的使用方法

978-7-111-51399-5-Chapter17-64.jpg

函数模板regex_replace()的使用方法参见例17-9。

例17-9

978-7-111-51399-5-Chapter17-65.jpg

例17-9的执行效果如图17-7所示。

978-7-111-51399-5-Chapter17-66.jpg

图17-7 例17-9的执行效果

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈