0
所以我有一个的std :: string以下文字:C++的正则表达式匹配,不匹配
2: enp1s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000\ link/ether 68:f7:28:4e:7b:ac brd ff:ff:ff:ff:ff:ff
,我试图提取 'enp1s0' 和'68:F7:28:4E:7B :AC”使用下面的正则表达式:
\d{1}:\s+(\w+).*link\/ether\s{1}([a-z0-9:]+)
其在网上正则表达式测试仪的工作原理,但是这个C++代码未检测到匹配:我要去哪里
std::regex interface_address("^\\d{1}:\\s+(\\w+).*link\\/ether\\s{1}([a-z0-9:]+)");
std::smatch pieces;
if (std::regex_match(line, pieces, interface_address)) {
std::string name = "";
std::string address = "";
for (size_t i = 0; i < pieces.size(); ++i) {
auto submatch = pieces[i];
if (i == 0) {
name = submatch.str();
} else if (i == 1) {
address = submatch.str();
}
}
std::cout << name << address << std::endl;
}
错误?
仅供参考,在正则表达式中没有任何理由给“{1}”。这是任何模式的默认值。 – Barmar
你的编译器是什么?并非所有编译器都支持'regex'井 –
请注意,该名称应该位于'pieces [1]'中,地址位于'pieces [2]'中。 'pieces [0]'是整个正则表达式的匹配。 – Barmar