그래서 내가 가지고 표준 : : 문자열에 다음 텍스트 :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를 : 교류 '다음 정규식을 사용 : 내가 갈거야 어디
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'를 잘 지원하지는 않습니다. –
이름은 반드시 조각 [1]이어야하고 주소는 조각 [2]'이어야합니다. 'pieces [0]'는 전체 regexp와 일치합니다. – Barmar