Wyrażenie regularne nie znajduje istniejących dopasowań.
Ostatnio zmodyfikowano 2019-05-11 18:38
Rashmistrz Temat założony przez niniejszego użytkownika |
Wyrażenie regularne nie znajduje istniejących dopasowań. » 2019-05-11 04:53:06 #include <iostream> #include <string> #include <string_view> #include <regex>
int main() { std::string lines[] = { u8 "[2019-05-03 21:55:52] [Output] : MajsterTynek [377]: .", u8 "[2019-05-03 21:55:52] [Output] : MajsterTynek [377]: .test", u8 "[2019-05-03 21:57:48] [Input] : say MajsterTynek [377]: .", u8 "[2019-04-30 17:01:16] [Output] : elfik1337 [214]: Wiesi3k. [31]: idź se klapnij", u8 "[2019-05-03 21:57:48] [Output] : MajsterTynek [377]: MajsterTynek [377]: .", u8 "[2019-05-03 21:55:52] [Output] : MajsterTynek [377]: asdf" }; for( auto & line: lines ) { std::string_view chk = line; chk.remove_prefix( 33 ); { { std::smatch match; std::string text( chk ); std::regex re { R "(^\S+ [\d+\]: [\.\?!t\s]+)" }; if( std::regex_match( text, match, re ) ) { continue; } } { std::smatch match_; std::string text_( chk ); std::regex re_ { R "(^\S+ [\d+\]:[\s]+\S+ [\d+\]:)" }; if( std::regex_match( text_, match_, re_ ) ) { continue; } } std::cout << line << '\n' << std::flush; } } }
Regex który napisałem nie wyłapuje mi wiadomości do zignorowania. Chcę zignorować linie w których gracze piszą tylko wielokrotnie konkretny symbol, jak i cytaty kopiuj-wklej innych graczy. Jak na razie program potrafi wyłapywać tylko kropki, ale nie wyłapuje cytatów tak jak bym tego chciał i nie mam zielonego pojęcia jak to naprawić. Kiedy używałem regex101 to działało (^\S+ [\d+]:[\s]+\S+ [\d+]:). Program praktycznie powinien zostawiać tylko: [2019-05-03 21:55:52] [Output] : MajsterTynek [377]: .test [2019-05-03 21:57:48] [Input] : say MajsterTynek [377]: . [2019-05-03 21:55:52] [Output] : MajsterTynek [377]: asdf |
|
pekfos |
» 2019-05-11 06:56:41 std::regex_match() testuje czy tekst jest dopasowany w całości. Użyj std::regex_search(), albo uwzględnij to w wyrażeniu regularnym. |
|
Rashmistrz Temat założony przez niniejszego użytkownika |
» 2019-05-11 18:38:56 Tak jak @pekfos powiedział. Nie wiedziałem o istnieniu regex_search i nie odróżniałem od regex_match. Teraz program działa tak jak powinien.
Dziękuję za pomoc. Powinienem częściej zaglądać do dokumentacji. |
|
« 1 » |