Zic0 Skrevet 12. august 2006 Skrevet 12. august 2006 Hallo Har ett problem med regex jeg ikke skjønner. #include <cstdlib> #include <iostream> #include <winsock.h> #include <string> #include "boost/regex.hpp" using namespace std; using namespace boost; SOCKET s; bool ConnectToHost(char* ip, int port){ WSADATA wsadata; if( WSAStartup(0x0202, &wsadata) ){ printf("Kunne ikke innstalere WSA\n"); return false; } if( wsadata.wVersion != 0x0202){ printf("Winsock krever ver 2\n"); return false; } SOCKADDR_IN target; target.sin_family = AF_INET; target.sin_port = htons(port); target.sin_addr.s_addr = inet_addr(ip); s = socket(AF_INET, SOCK_STREAM, 0); if(s == INVALID_SOCKET){ printf("Kunne ikke lage socket'en\n"); return false; } if( connect(s, (SOCKADDR *)&target, sizeof(target)) == SOCKET_ERROR){ return false; } return true; } void PrintData(string nick, string name){ nick = "NICK " + nick + "\n"; name = "USER " + name + " " + name + "_ homelien: " + name + "\n"; char* cmd; char buf[512]; if(s){ int iResult; send(s, nick.data(), nick.size(), 0); send(s, name.data(), name.size(), 0); printf(nick.data()); printf(name.data()); regex expression("Z"); cmatch result; do { iResult = recv(s, buf, sizeof(buf) - 1, 0); if( iResult > 0){ if( regex_match(buf, result, expression) ){ cmd = "JOIN #c++.no\n"; send(s, cmd, sizeof(cmd), 0); printf("\nJoiner #c++.no\n"); } printf(buf); } else if(iResult == 0){ printf("Tilkobling avsluttes"); } else { printf("Error med å motta data"); } } while(iResult > 0); } else { printf("Socket'en eksisterer ikke"); } } int main(int argc, char *argv[]) { if( ConnectToHost("195.159.0.90", 6667) == true){ printf("Tilkoblet\n"); PrintData("Zico", "Zicohost"); } else { printf("Kunne ikke koble til\n"); } if(s) closesocket(s); WSACleanup(); system("PAUSE"); return EXIT_SUCCESS; } Problemet er at jeg ikke skjønner hvordan den IKKE greier å finne Z i bufferen. Det finner jeg meg ikke mulig i ettersom den printer ut "Zico" på hver linje. Håper noen kan hjelpe.
kjetil7 Skrevet 15. august 2006 Skrevet 15. august 2006 Følgende kode gjør deg kanskje litt klokere? #include <iostream> #include <string> #include <boost/regex.hpp> using namespace std; using namespace boost; int main() { string str("Zico"); regex expA("Z"); regex expB("Z.*"); cmatch result; if(regex_match(str.c_str(), result, expA)) { cout << "A: " << str << endl; } if(regex_match(str.c_str(), result, expB)) { cout << "B: " << str << endl; } } Ta ellers en titt på: http://boost.org/libs/regex/doc/ http://regular-expressions.info/
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå