正则表达式在 c++ 中不匹配?
Regular Expressions are not match in c++?
我在正则表达式中遇到了问题。我有一个字符串,字符串是用正则表达式验证的,它正在使用 python 脚本,但不能使用 c++。
工作蟒蛇代码:
import re
txt = "x01msvc-serverx1Cmsvc-xyzy4x02<?xml version="1.0" encoding="UTF-8"?><SVCMessage currency="INR" hostName="msvc-xyz4" language="US-en" retransmit="N" sequence="00" timeout="90" version="8"><Amount>0.01</Amount><BusinessDate>20190506</BusinessDate><CheckNumber>0</CheckNumber><LocalDate>20170506</LocalDate><LocalTime>160722</LocalTime><RequestCode>POINT_REDEMPTION</RequestCode><RevenueCenter>0</RevenueCenter><TerminalID>21</TerminalID><TraceID>190506860722N000000</TraceID><Track2>1161111112</Track2><TransactionEmployee>0</TransactionEmployee></SVCMessage>x03x04"
matcher = re.compile(r".*x01([A-Za-z0-9_-]*)x1C([A-Za-z0-9_-]*)x02([^x00-x1Fx7F]*)x03x04.*")
results = matcher.match(txt)
if results == None:
print ('Invalid query , closed')
else:
print ('sucess')
我的 c++ 代码:
#include <iostream>
#include <regex>
using namespace std;
int main()
{
string a = "x01msvc-serverx1Cmsvc-xyzy4x02<?xml version="1.0" encoding="UTF-8"?><SVCMessage currency="INR" hostName="msvc-xyz4" language="US-en" retransmit="N" sequence="00" timeout="90" version="8"><Amount>0.01</Amount><BusinessDate>20190506</BusinessDate><CheckNumber>0</CheckNumber><LocalDate>20170506</LocalDate><LocalTime>160722</LocalTime><RequestCode>POINT_REDEMPTION</RequestCode><RevenueCenter>0</RevenueCenter><TerminalID>21</TerminalID><TraceID>190506860722N000000</TraceID><Track2>1161111112</Track2><TransactionEmployee>0</TransactionEmployee></SVCMessage>x03x04";
// Here b is object of regex- Regular Expression
regex b(".*x01([A-Za-z0-9_-]*)x1C([A-Za-z0-9_-]*)x02([^x00-x1Fx7F]*)x03x04.*");
cout<< a << endl;
if( regex_match(a, b)){
cout << "String is matches Reguler Expreation " << endl;
}else{
cout << "String are not match" << endl;
}
return 0;
}
预期的结果是 - 字符串匹配...在 C++ 中
将正则表达式字符串中的加倍怎么样?
//.........VV...................VV...................VV......VV.........VV......VV...VV
regex b(".*\x01([A-Za-z0-9-_]*)\x1C([A-Za-z0-9-_]*)\x02([^\x00-\x1F\x7F]*)\x03\x04.*");
否则,您可以使用原始文本字符串
// .....VVV...........................................................................VV
regex b(R"(.*x01([A-Za-z0-9-_]*)x1C([A-Za-z0-9-_]*)x02([^x00-x1Fx7F]*)x03x04.*)");
题外建议:避免使用std::cout
、std::string
、std::regex
等进行using namespace std;
和明确的std
。
最有可能的问题出在终止正则表达式字符串x00
字符中。
您可以使用调用重载explicit basic_regex( const CharT* s, flag_type f = std::regex_constants::ECMAScript );
字符串文本来初始化b
。
为避免此问题,您可以尝试使用std::string
初始化它,而这反过来又可以像这样初始化:
char re[] = ".*x01([A-Za-z0-9_-]*)x1C([A-Za-z0-9_-]*)x02([^x00-x1Fx7F]*)x03x04.*";
std::string re_str(re, sizeof(re));
相关文章:
- Qt SQLite没有查询或参数计数不匹配
- 模板参数推导失败,函数参数/参数不匹配
- 在使用累加时,C++中的运算符+不匹配
- C++ 与操作员不匹配<<
- 在 Arduino 上使用 sscanf 会导致与 const char * 不匹配,并且返回值始终相同,尽管输入值不同
- 与'operator='不匹配(操作数类型'String'且"void")
- C++模板/别名 - 模板参数列表中参数 1 处的类型/值不匹配
- C4018:类内有符号、无符号不匹配
- 我在 .h 中有一个枚举类,并且在.cpp错误中有一个运算符重载:与"运算符<<不匹配
- 为什么我收到错误:"运算符<<不匹配?
- RE2 不匹配非 ASCII 字符
- 函数签名与调用的函数不匹配,常量字符[]和字符*之间的区别?
- 模板推导:为什么函数指针模板定义在常量和/或引用时不匹配?
- 错误:"模板<类_Tp,类_Dp>类 std::unique_ptr"的模板参数列表中参数 1 的类型/值不匹配
- OpenSSL fips in C++ wrapper Library 如何?错误:指纹不匹配
- 为什么我的数组值与此处的全局变量不匹配?
- 引号之间匹配/不匹配,带有不可避免的引号和多行
- 映射迭代器与运算符不匹配
- C++调用和定义不匹配
- 模板专用化与派生类不匹配