2010-07-02 4 views
2

J'ai besoin d'extraire des données d'une chaîne. Voici un exemple:Expression régulière pour analyser la chaîne d'agent utilisateur

Mozilla/5.0 (Macintosh; U; PPC Mac OS X ; tr-tr) AppleWebKit/418 (KHTML, comme Gecko) Safari/417.9.3

I veulent obtenir ce qui est après le « Safari/» (417.9.3) mais:

  1. la chaîne « Safari » peut être dans tous les cas de caractère et peut être anywhaere dans la chaîne.
  2. La version est séparée de "Safari" par "/", "/", "/", "/" ou tout espace.
  3. La fin de chaîne de version par les espaces blancs ")", "(", "", ou à la fin de la chaîne

Tout le monde peut me aider à construire cette place

Merci.!

+0

Êtes-vous familier avec PHP: s 'get_browser'? http://php.net/manual/fr/function.get-browser.php –

Répondre

4
preg_match("#Safari(\s+|/\s*)([^)(;]+)#i", $_SERVER['HTTP_USER_AGENT'], $results); 

le i à la fin signifie « insensible à la casse », qui répond à des critères un.

(\s+|\s*/\s*)? correspond soit au moins un caractère d'espace ou une barre oblique précédé et suivi d'un nombre arbitraire de caractères d'espaces (de zéro à l'infini et au-delà), qui répond aux critères deux.

[^)(;]+ correspondra autant de caractères que possible qui sont pas à l'intérieur de l'ensemble, qui répond aux critères trois.

+0

Pour "(Mozilla/5.0 (Macintosh; U; PPC Mac OS X; fr-fr) AppleWebKit/412 (KHTML, comme Gecko) Safari/412 Privoxy/3.0 "votre regex ne s'arrête pas sur l'espace Pourquoi? – Activist

+0

@Activist: parce que j'ai oublié de mettre' s 'dans le dernier ensemble ('[((); \ s] +' au lieu de ' [^();] + ') .De plus, vous devriez essayer d'apprendre des expressions régulières, c'est une solution vraiment facile que vous auriez pu faire si vous aviez appris comment cela fonctionne: – zneak

+0

Je l'apprends lentement en posant des questions et en vérifiant les réponses. .. – Activist

0

N'est-ce pas similaire à l'expression rationnelle de Firefox que vous avez demandée auparavant?

/Safari[ \/]+([0-9\.]+)/i 
Questions connexes