2010-08-15 5 views
3

J'ai une chaîne comme ceComment utiliser regex pour extraire des valeurs d'une chaîne. (PHP)

\"access_token=103782364732640461|2.ZmElnDTiZlkgXbT8e34Jrw__.3600.1281891600-10000186237005083013|yD4raWxWkDe3DLPJZIRox4H6Q_k.&expires=1281891600&secret=YF5OL_fUXItLJ3dKQpQf5w__&session_key=2.ZmElnDTiZlkgXbT8e34Jrw__.3600.1281891600-10000186237005083013&sig=a2b3fdac30d53a7cca34de924dff8440&uid=10000186237005083013\" 

Je veux extraire l'UID.

+0

Quel est le '\" 'au début de votre chaîne? Est-ce un anti-slash dans une seule chaîne entre guillemets, ou doit-elle être comprise comme un guillemet échappé à l'intérieur d'une chaîne entre guillemets? –

+0

Vous pourrait exploser sur &? –

Répondre

10

Il est difficile de donner la meilleure réponse sans plus d'informations. Vous pouvez essayer cette expression régulière:

'/&uid=([0-9]+)/' 

code Exemple:

$s = '\"access_token=103782364732640461|2.ZmElnDTiZlkgXbT8e34Jrw__.3600.1281891600-10000186237005083013|yD4raWxWkDe3DLPJZIRox4H6Q_k.&expires=1281891600&secret=YF5OL_fUXItLJ3dKQpQf5w__&session_key=2.ZmElnDTiZlkgXbT8e34Jrw__.3600.1281891600-10000186237005083013&sig=a2b3fdac30d53a7cca34de924dff8440&uid=10000186237005083013\"'; 
$matches = array(); 
$s = preg_match('/&uid=([0-9]+)/', $s, $matches); 
print_r($matches[1]); 

Résultat:

10000186237005083013 

Mais je remarque que votre chaîne d'entrée ressemble à une partie d'une URL. Si c'est le cas, vous pouvez utiliser parse_str à la place. Cela traitera correctement un certain nombre de cas spéciaux que l'expression régulière ne gérera pas correctement.

$arr = array(); 
parse_str(trim($s, '\"'), $arr); 
print_r($arr['uid']); 
+0

+1 pour parse_str(). – bancer

Questions connexes