C# Regex to C++ boost::regex
C# Regex to C++ boost::regex
我需要匹配形式为
的c++代码中的字符串L, N{1, 3}, N{1, 3}, N{1, 3}
,其中在上述伪代码中,L
总是一个字母(大写或小写)或一个句号(.
字符),N
总是数字[0-9]
。
因此,显式地,我们可能有B, 999, 999, 999
或., 8, 8, 8
,但每个,
之后的数字字符数总是相同的,长度为1、2或3位;所以D, 23, 232, 23
不可能。
在c#中,我将像下面这样匹配
string s = " B,801, 801, 801 other stuff";
Regex reg = new Regex(@"[.w],s*d{1,3},s*d{1,3},s*d{1,3}");
Match m = reg.Match(s);
好了。然而,我需要一个类似的正则表达式使用boost::regex
。
std::string s = " B,801, 801, 801 other stuff";
boost::regex regex("[\.w],s*d{1,3},s*d{1,3},s*d{1,3}");
boost::match_results<std::string::const_iterator> results;
boost::regex_match(s, results, regex);
,但这是给我'w' : unrecognized character escape sequence
和s
和d
相同。但从文档中我的印象是我可以使用d
, s
和w
没有问题。
我这里做错了什么?
编辑。根据上面的评论,我已经切换到std::regex
。现在,假设正则表达式是相同的,下面的编译但是正则表达式不匹配…
std::string p = "XX";
std::string s = " B,801, 801, 801 other stuff";
std::regex regex(R"del([.w],s*d{1,3},s*d{1,3},s*d{1,3})del");
if (std::regex_match(s, regex))
p = std::regex_replace(s, regex, "");
您可以在正则表达式中使用w
、s
和d
。然而,这不是你在做的;您正在尝试使用w
作为字符串中的字符。为了在实际字符串中出现和
w
,您需要转义(当然,
s
和d
也一样):
boost::regex regex("[\.\w],\s*\d{1,3},\s*\d{1,3},\s*\d{1,3}");
从c++ 11开始,您可以使用原始字符串字面值使代码更类似于c#版本:
boost::regex regex(R"del([.w],s*d{1,3},s*d{1,3},s*d{1,3})del");
相关文章:
- 使用 boost::regex 从目录中获取带有一些正则表达式的文件名称时出现意外输出
- 在VC2015U3上,std::regex比boost::regex慢得多
- 使用 boost::regex (c++) 比较两个正则表达式
- Build Boost Regex for Windows VS2013
- std::string references、std::regex和boost::filesystem的基本概念
- boost::regex 和std::regex之间的不一致?
- 尝试使用生成文件编译程序时"fatal error: boost/regex.hpp: No such file or directory" C++
- 使用Boost或Regex拆分这条线
- 带有Boost Regex库的未解决的外部对象
- Byte Regex与C 的Boost匹配
- boost::regex链接问题在Xcode 4.5.2中
- 如何检查使用哪个匹配组进行匹配(boost-regex)
- boost::regex和std::regex之间的不一致
- Boost.Regex parsing
- BOOST.REGEX定界器解析
- 以下等级表达式不适合Boost Regex
- C++, TR1, Regex and Boost
- 在Windows C 代码:: Blocks上的Boost Regex
- Boost Regex用于格式化MAC地址字符串
- Regex boost library comparing