我有两个向量,一个保存我的正则表达式,另一个保存将根据正则表达式检查的字符串,其中大多数都很好,除了这个(如下所示),字符串是一个正确的字符串,与正则表达式匹配,但它输出的是不正确的,而不是正确的。
输入字符串
.C/IATA代码在下面
std::string errorMessages [6][6] = {
{
"Correct Corparate Name\n",
},
{
"Incorrect Format for Corporate Name\n",
}
};
std::vector<std::string> el;
split(el,message,boost::is_any_of("\n"));
std::string a = ("");
for(int i = 0; i < el.size(); i++)
{
if(el[i].substr(0,3) == ".C/")
{
DCS_LOG_DEBUG("--------------- Validating .C/ ---------------");
output.push_back("\n--------------- Validating .C/ ---------------\n");
str = el[i].substr(3);
split(st,str,boost::is_any_of("/"));
for (int split_id = 0 ; split_id < splitMask.size() ; split_id++ )
{
boost::regex const string_matcher_id(splitMask[split_id]);
if(boost::regex_match(st[split_id],string_matcher_id))
{
a = errorMessages[0][split_id];
DCS_LOG_DEBUG("" << a )
}
else
{
a = errorMessages[1][split_id];
DCS_LOG_DEBUG("" << a)
}
output.push_back(a);
}
}
else
{
DCS_LOG_DEBUG("Do Nothing");
}stsplit_id = "IATA"
splitMasksplit_id =“a{1,15}”<--
但是它仍然输出不正确的公司名称格式。
我不明白为什么它打印不正确,当它应该是正确的,谁能帮助我这里吗?
发布于 2012-03-18 21:13:14
您的正则表达式和周围的逻辑是可以的。
您需要扩展日志记录,并在调用splitMask和st之前打印boost::regex_match和st的相关部分,以反复检查这些值是否符合您所认为的值。用标点符号包围它们,并打印字符串长度以确保。
您可能知道,只有当整个字符串是匹配时,boost::regex_match才能找到匹配;因此,如果某个地方有一个不可打印的字符,或者可能有一个尾随空格字符,这将很好地解释您所看到的结果。
https://stackoverflow.com/questions/9376977
复制相似问题