C++ C+的正则表达式库+;03

C++ C+的正则表达式库+;03,c++,regex,c++03,C++,Regex,C++03,我有一个这种格式的字符串需要验证: H12345-001 这里的第一个字符应该是字母字符,后跟5位数字,然后是破折号(-),然后是两个零,最后是一位数字 我不确定正则表达式是否是正确的选择,或者是否可以用一种比较每个字符的天真方式来做。若正则表达式是正确的方法,那个么有人可以向示例教程指出如何使用它。我使用的是C++03(即没有C++11)。这个正则表达式非常糟糕,但最容易理解的是,我可以找到与您想要的匹配的正则表达式 ([A-Z])\d\d\d\d\d-00\d 以下是有关它的教程,如所要求

我有一个这种格式的字符串需要验证:

H12345-001

这里的第一个字符应该是字母字符,后跟5位数字,然后是破折号(
-
),然后是两个零,最后是一位数字


我不确定正则表达式是否是正确的选择,或者是否可以用一种比较每个字符的天真方式来做。若正则表达式是正确的方法,那个么有人可以向示例教程指出如何使用它。我使用的是C++03(即没有C++11)。

这个正则表达式非常糟糕,但最容易理解的是,我可以找到与您想要的匹配的正则表达式

([A-Z])\d\d\d\d\d-00\d
以下是有关它的教程,如所要求的:

假设字符串可以包含小写字母,正则表达式是
[a-zA-z]\d\d\d\d\d\d-00\d
(如果不需要小写字母,只需删除
a-z

如果引入正则表达式库不值得,则使用简单的自定义验证器():

bool是有效的(const std::string&str)
{
返回
(str.size()==10)&&
((('a'您可以用于:

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

boost::regex your_regex("[A-Z]\\d{5}-00\\d");
boost::smatch match;

int main() {
    std::string input = "H12345-001";
    std::string output;
    if(boost::regex_match(input, match, your_regex)) {
        output = boost::lexical_cast<std::string>(match);
        std::cout << output << std::endl;
    } 
    return 0;
}
#包括
#包括
#包括
#包括
boost::regex你的正则表达式(“[A-Z]\\d{5}-00\\d”);
小比赛;
int main(){
std::string input=“H12345-001”;
std::字符串输出;
if(boost::regex_匹配(输入,匹配,您的_regex)){
输出=boost::词法转换(匹配);

std::cout任何正则表达式库都可以。例如,POIX系统有pcre,您只需
#包含
并调用
regcomp
函数族(获取更多信息)。这些函数中没有任何东西需要C++11


P>坦白地说,如果你要用ReXEXS,这个问题似乎不值得,那么一个难题就是在C++代码中适当地使用正则表达式,因为必须要避开所有的反斜杠和东西。你可能想尝试用C++中的正则表达式来处理。或者,但是这很简单,我不会带来W。为此创建一个新库(如果您已经在使用一个提供正则表达式的库,当然可以使用它)。否则,我会用一个自定义函数来验证这一点。我们的项目中没有使用Boost。这就是为什么我必须决定是否必须使用Boost来验证字符串,或者只能逐个字符检查字符。只是想寻求专家的建议,如果我的想法是正确的“C++3.0”你是说Borland Turbo C++ 3吗?如果是这样,那肯定是古董。他用的是 iAlpHAh()< <代码> > <代码> iSigDe()
函数用于此目的是的。它们是在
下为区域设置感知版本提供的。@Slava:是的,但它们依赖于当前的区域设置。我在回答中没有充分考虑区域设置来建议这两个函数,所以我忽略了它们。
#include <iostream>
#include <string>
#include <boost/lexical_cast.hpp>
#include <boost/regex.hpp>

boost::regex your_regex("[A-Z]\\d{5}-00\\d");
boost::smatch match;

int main() {
    std::string input = "H12345-001";
    std::string output;
    if(boost::regex_match(input, match, your_regex)) {
        output = boost::lexical_cast<std::string>(match);
        std::cout << output << std::endl;
    } 
    return 0;
}