使用Boost :: Xpressive匹配单个字符

时间:2010-12-10 15:02:08

标签: c++ regex boost boost-xpressive

我有一个字符串,可以是“/”“+”“。”或描述性名称

我正在试图弄清楚如何使用正则表达式检查字符串是否匹配上面3个特殊字符中的任何一个(/ +或。)

在做了一些阅读后,我决定使用boost :: xpressive,但我还是想不通。

是Boost:xpressive适合这个任务,我的正则表达式字符串需要什么?

谢谢

2 个答案:

答案 0 :(得分:2)

为什么不使用std::string::find_first_of()来做自己的解决方案?对于一个相当简单的任务来说,听起来像很多机器。

修改

如果你仍然被卡住,请尝试一下。

#include <iostream>
#include <boost/xpressive/xpressive.hpp>

using namespace std;
using namespace boost::xpressive;

int main()
{
   sregex re = sregex::compile("[+./]|[:word:]+");

   sregex op = as_xpr('+') | '.' | '/';
   sregex rex = op | (+alpha);

   if (regex_match(string("word"), re))
      cout << "word" << endl;
   if (regex_match(string("word2"), re))
      cout << "word2" << endl;
   if (regex_match(string("+"), re))
      cout << "+" << endl;
   return 0;
}

有两种方法可以做同样的事情。名为re的变量使用类似perl的正则表达式字符串初始化。 rex使用Xpressive本机元素。

答案 1 :(得分:1)

我会说Boost.Xpressive可能对任务有点过分,但这是你的召唤。

当您想要验证特别格式化的字符串时,正则表达式是生命储蓄者。这里没有涉及的格式,只有一组可能的值。我的建议:如果你的问题可以通过简单的连续字符串相等比较来解决,那么你可能不需要像正则表达式那样的东西。