等效于 C++ 中的 Regex.Replace

Posted

技术标签:

【中文标题】等效于 C++ 中的 Regex.Replace【英文标题】:Equivalent to Regex.Replace in C++ 【发布时间】:2012-04-24 15:30:00 【问题描述】:

c# 中有 Regex,我可以使用它来删除一些任意字符或字符范围,例如 Regex.Replace(str, "[^a-zA-Z0-9_.]+", "", RegexOptions.Compiled)。但是什么是 C++ 中的等价物。我知道 Boost 里面有一个正则表达式库。但是对于这个操作,它是否可行以及它的性能如何?在 c++ 中从字符串中删除字符的最佳和快速方法是什么?

【问题讨论】:

这是提升,我会说你不能出错 如果您真的关心性能,请使用Boost.Xpressive(特别是它的静态正则表达式)而不是 Boost.Regex。 【参考方案1】:

你可能想要boost::regex_replace:

#include <boost/regex.hpp>
#include <string>

const std::string input; 
boost::regex matcher("[^a-zA-Z0-9_.]+");
const std::string formatter("");

std::string output = boost::regex_replace(input, matcher, formatter);

【讨论】:

【参考方案2】:

我使用过 Boost,发现它既快速又易于使用。一个例子:

#include <boost/regex.hpp>

bool detect_mypattern( const string& text )

    // A specific regex pattern
    static const boost::regex ep("[\\w\\s]8\\s1\\w2\\s1Test");
    return( boost::regex_match(text, ep) );

当然,如果您不需要正则表达式的强大功能,还有很多字符串函数可以更快地从字符串中拼接字符。

【讨论】:

以上是关于等效于 C++ 中的 Regex.Replace的主要内容,如果未能解决你的问题,请参考以下文章

C 编程语言等效于 C++ 中的结构初始化

System.arraycopy() 等效于 C、C++ 或 Objective-C

DoEvents 等效于 C++?

C++ typedef struct 等效于 C#

C++/CLI 等效于 C# 检查关键字

C# RSA 等效于 C++ Crypto API 的代码