我的最后一个正则表达式不起作用,但我无法弄清楚原因
My last regular expression won't work but i cannot figure out the reason why
我有两个向量,一个保存我的正则表达式,另一个保存将根据正则表达式进行检查的字符串,除了这一个(如下所示),它们中的大多数都能正常工作。字符串是正确的字符串,与正则表达式匹配,但它输出的不是正确的,而是不正确的。
输入字符串
.C/IATA
代码低于
std::string errorMessages [6][6] = {
{
"Correct Corparate Namen",
},
{
"Incorrect Format for Corporate Namen",
}
};
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");
}
st[split_id]="IATA"
splitMask[split_id]="[a-zA-Z]{1,15}"<---
但它仍然输出公司名称的错误格式
我不明白为什么它打印不正确,而它应该是正确的。有人能在这里帮我吗?
您的正则表达式和周围的逻辑是可以的。
您需要扩展日志记录,并在调用boost::regex_match
之前打印splitMask
和st
的相关部分,以仔细检查这些值是否为您所认为的值。用一些标点符号将它们括起来打印,并打印字符串长度以确定。
正如您可能知道的,只有当整个字符串匹配时,boost::regex_match
才会找到匹配;因此,如果某个地方有一个不可打印的字符,或者可能有一个尾随空格字符,这将完美地解释您所看到的结果。
相关文章:
- 当我尝试添加 2 个大字符串时,我无法弄清楚出了什么问题
- 弄清楚如何在C++中将整数读入 ASCII
- 写一个分数类,我无法弄清楚这些错误
- 分段错误(核心转储)但无法弄清楚
- N-queen问题:无法弄清楚为什么我的解决方案不起作用
- 为什么我的编译器无法弄清楚这种转换,它何时存在?
- 任何人都可以弄清楚这段代码如何显示运行错误?它打印无限时间 -1 以及正确答案
- 循环不继续无法弄清楚为什么
- 我一直试图弄清楚我在这个链表程序中做错了什么
- 无法弄清楚为什么没有调用重载运算符 []
- 无法弄清楚如何使用 c++ 中的链表按从 a 到 z 的顺序显示字母
- 我无法弄清楚"对Winmain@16错误的未定义引用"
- 谁能弄清楚为什么我的循环会失败?
- 试图弄清楚我需要做哪些更改才能使代码正常工作.使用Visual Studio
- C++需要弄清楚为什么这个 for 循环不起作用
- 使用指针和引用,无法弄清楚为什么DFS无限重复
- 弄清楚这段代码是怎么回事(递归下降案例研究)
- 我无法弄清楚我的代码未显示预期结果的问题
- 我无法弄清楚我的代码出了什么问题
- 用 Big-O 表示法弄清楚我的程序的算法复杂性