Zic0 Skrevet 12. august 2006 Del 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. Lenke til kommentar
kjetil7 Skrevet 15. august 2006 Del 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/ Lenke til kommentar
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å