如何使用正则表达式比较*。\ t?

时间:2011-08-26 09:24:44

标签: c++

string str;
if (str = 1.\t) || (str = 2.\t) || ........ || (str = n.\t) {
  // some code

}

基本上我必须检查int,然后是“。\ t”

4 个答案:

答案 0 :(得分:1)

你想要的正则表达式是[0-9]+\.\t

如果需要正则表达式引擎,请使用Boost.Regex。

答案 1 :(得分:1)

这是一种方法(没有正则表达式),如果你的字符串总是一个int后跟.\t

  1. 在字符串
  2. 中查找子字符串.\t
  3. 如果找到,请将其从字符串
  4. 中删除
  5. 尝试将字符串转换为数字(类似于boost::lexical_cast,因为如果无法转换字符串,这将引发异常),如果失败,请尝试strtol并检查它是否使用了完整的字符串。

答案 2 :(得分:0)

afaik必须使用额外的lib才能在c ++中使用regExp功能,而boost提供了这样的功能。 我发现johndcook.com下的解释非常有帮助。

答案 3 :(得分:0)

对于这种情况,正则表达式是过度的 试试这个:

bool testIntFollwedByTab(std::string const& test)
{
    std::stringstrean  teststream(test);
    int  num;
    char c;
    return (teststream >> std::noskipws >> num >> c) && (c == '\t');
}
  • 它将字符串test放入流中。
  • 然后我们读取一个数字,后跟流中的一个字符。操纵器noskipws表示空白是重要的(否则在数字和字符被静默删除之前引导空格)。
    • 如果失败(因为没有数字后跟一个字符),则设置流的错误位并且流转换为false并且return语句返回false。
    • 如果这是成功的,那么我们测试是否读取的字符是'\ t'

或者在普通代码中(有一行):

int num; char c;
if ((std::stringstream(str) >> std::noskipws >> num >> c) && (c == '\t'))
{
    // Do Work
}