2011-04-27 3 views
1

Je suis nouveau à des expressions régulières - J'utilise Poco en C++ pour tirer les adresses IP d'une chaîne et (essayer) de mettre tous les matches IP dans un vecteur de chaîne:C++ Expressions régulières

string result = tcpClient.receiveRaw(); 

RegularExpression re("\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b"); 

RegularExpression::MatchVec matches; 
re.match(result, 0, matches); 

IPlist = result.substr(matches[1].offset, matches[1].length); 

Je don Je ne pense pas que la dernière ligne soit correcte (je ne sais pas comment cela fonctionne) J'essaye de tirer toutes les adresses IP de cette chaîne initiale et de les ajouter à un vecteur de chaîne. Pourquoi ne pas simplement utiliser les expressions régulières de C POSIX dans?

+4

Je ne sais pas à propos de Poco. Mais je suggère de regarder des expressions régulières de boost http://www.boost.org/doc/libs/1_46_1/libs/regex/doc/html/index.html –

+1

@ChristianSeverin S'il vous plaît être conscient que chaque édition que vous faites pousse la question à la première page et peut créer beaucoup de bruit. Si vous pensez que le changement d'adresse devrait avoir lieu, posez-le d'abord sur [meta] (http://meta.stackoverflow.com/). – JAL

Répondre

0

Pourquoi? Voici la documentation:

http://pubs.opengroup.org/onlinepubs/007908799/xsh/regcomp.html

Au-delà, ce qui est en fait mal ici? Vous n'avez pas spécifié de problème réel. Je ne suis pas familier avec la classe que vous utilisez, mais rien ne semble évidemment brisé, sauf que nous ne savons pas ce qu'est IPlist. Il semble être une liste mais est en train d'être égal à une seule valeur de chaîne. Je soupçonne que la logique peut être indésirable.

2

L'expression peut être raccourcie et le \b a probablement besoin d'un autre échappement (mais je ne suis pas familier avec Poco, donc je pourrais être loin). Essayez ceci:

RegularExpression re("\\b((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b");