在C ++中使用regex检查字符串

时间:2012-06-25 07:41:34

标签: c++ regex string

我将在C ++应用程序中使用正则表达式,但我对正则表达式没有经验。我特别想要检查一些字符串,如果它们属于以下类别之一:

X.anystring - > X必须是必填字母(不是数字)。

XY.anystring - > X,Y必须是数字0-9(不是字母)。

如何使用正则表达式检查它们?为了让我熟悉正则表达式,你可以推荐什么正则表达式的教程?

6 个答案:

答案 0 :(得分:3)

说真的,regexp:s在这种情况下不适合你。

首先,regexp:s不是C ++语言的一部分,因此您需要使用特定的regexp库。 (C ++ 11,无论是谁,包括对regexp的支持:s。)

其次,你的两个用例都可以简单地用普通的C ++编码,你需要做的就是遍历字符串中的字符并检查它们是否符合你的要求。

答案 1 :(得分:1)

当前的C ++ 11标准支持正则表达式,但我不确定哪些编译器支持它并准备好了。

同时,Boost库为C ++(link here)提供了一个很好的正则表达式系统。

在学习正则表达式方面,this可能有所帮助(专注于使用Boost正则表达式)。

可能更简单的替代解决方案就是自己编写代码。类似的东西:

bool check_first(const string& myString)
{
    if (!isalpha(myString[0]) || myString[1] != '.') return false;
    return true;
}

bool check_second(const string& myString)
{
    if (!isdigit(myString[0]) || !isdigit(myString[1]) || myString[2] != '.') return false;
    return true;
}

答案 2 :(得分:1)

  

X.anystring - > X必须是必填字母(不是   数字)。

必需的正则表达式

[a-zA-Z]\.[\w]+
  

XY.anystring - > X,Y必须是数字0-9   (不是信件)。

必需的正则表达式

[0-9]{2}\.[\w]+

详细了解正则表达式here。一旦您了解了一般的正则表达式,您就可以申请任何您选择的语言。

答案 3 :(得分:1)

如果你只是想知道一个字符串是否匹配其中一个,但你不关心它匹配哪一个,你可以使用:

"(?:(?:[a-zA-Z])|(?:[0-9]{2}))\..*"

使用C ++ 11 regexECMAScript语法。

答案 4 :(得分:1)

#include <regex>

std::string str = "OnlyLetter,12345";

std::string x = "([a-z]|[A-Z])+";
std::string y = "[0-9]+";
std::string expression = std::string(x).append(",").append(y);
std::tr1::regex rx(expression);
bool match = std::tr1::regex_match(str.c_str(),rx);
// match = true. Valid String
// match = false. Invalid String. ex.: "OnlyLetter,12s345"

答案 5 :(得分:0)

这取决于您正在使用的正则表达式库。但是 以下内容适用于Boost和C ++ 11:

对于X.anystring(X是alpha):

"[[:alpha:]]\\..*"

对于XY.anystring:

"[[:digit:]][[:digit:]]\\..*"

这些用于regex_match;如果你想使用regex_search, 你必须将表达式“锚定”到字符串的开头 在它前面加上'^'(但你可以删除最后的'。*')。