Forum: PC-Programmierung C++ Regex vs regexr.com


von Vincent H. (vinci)


Lesenswert?

Grüß euch

Ich bräuchte kurz Hilfe um einen Regex Ausdruck in C++ 
zusammenzustellen.

Folgender Ausdruck soll Zahlen und Zahlenbereich aus einem String 
kitzeln:
1
(\d+\s*-\s*\d+)|(\d+)

Mein Teststring hierfür ist:
1
1 10-42 7 unmatched text , 42

https://regexr.com/ meldet für diese Kombination auch "4x matches", ich 
schaffe es nur nicht das selbe Ergebnis mit C++ zu reproduziereren. 
Folgender Code gibt lediglich "1 1" aus...
1
#include <iostream>
2
#include <regex>
3
#include <string>
4
5
std::string str{"1 10-42 7 unmatched text , 42"};
6
std::regex str_expr{"(\\d+\\s*-\\s*\\d+)|(\\d+)"};
7
8
int main() {
9
  std::smatch sm;
10
  std::regex_search(str, sm, str_expr);
11
  for (auto& m : sm) std::cout << m << " ";
12
  std::cout << "\n";
13
}

von Εrnst B. (ernst)


Lesenswert?

1
int main() {
2
3
  std::smatch sm;
4
5
  while(std::regex_search(str, sm, str_expr)) {
6
    std::cout << sm.str() << " ";
7
    str = sm.suffix();
8
  }
9
10
  std::cout << "\n";
11
12
  return 0;
13
}

von Vincent H. (vinci)


Lesenswert?

Ach die muss man öfter aufrufen.

Danke!

von Εrnst B. (ernst)


Lesenswert?

Vincent H. schrieb:
> Ach die muss man öfter aufrufen.

oder du nimmst einen std::regex_iterator, wenn dir das ständige Kürzen 
von "str" missfällt ...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.