0
だから私持っているのstd ::文字列に次のテキスト: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」は、次の正規表現を使用して:私はつもりどこ
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;
}
:オンライン正規表現テスターで動作しますが、このC++コードが一致を検出しません
\d{1}:\s+(\w+).*link\/ether\s{1}([a-z0-9:]+)
違う?
参考までに、正規表現では{1}は何も理由はありません。これはどのパターンのデフォルトです。 – Barmar
あなたのコンパイラは何ですか?すべてのコンパイラが 'regex'をよくサポートしているわけではありません。 –
名前は' pieces [1] 'で、アドレスは' pieces [2] 'でなければなりません。 'pieces [0]'は正規表現全体のマッチです。 – Barmar