2010-12-13 48 views
0

J'ai un problème assez simple, je dois analyser à travers cette chaîne:problème simple Regex que je ne peux pas comprendre

"user_id" => "BXoVWYg-T_QS" 

Et prenez seulement le BXoVWYg-T_QS

Je l'ai utilisé regex ainsi loin de saisir beaucoup d'une chaîne beaucoup plus grande, mais je ne peux pas comprendre comment le faire descendre à seulement le contenu de la chaîne user_id

C'est le regex je jusqu'à présent:

"user_id" => ".*" 

Aidez s'il vous plaît!

Mise à jour J'ai une chaîne de html que j'essaie d'analyser pour une application iPhone dans l'objectif-c. Si je peux obtenir la syntaxe regex, mes problèmes seront résolus

+0

Quelle langue utilisez-vous? – justintime

Répondre

1
"user_id" => "([^"]*)" 
+0

Hey merci pour la réponse, mais il semble que cette expression regex retourne juste la chaîne d'origine "user_id" => "BXoVWYg-T_QS" ... Je cherche juste à obtenir ce qui est à l'intérieur de la deuxième série de "" – Jim

+2

@Jim - Le problème n'est pas la regex, mais comment vous l'utilisez. Vérifiez la documentation de votre API regex pour savoir comment accéder aux "groupes capturés" ou "sous-modèles" dans le résultat. Vous * toujours * correspondra à la chaîne entière; les groupes sont comment vous accédez à des morceaux spécifiques de celui-ci. (Dans ce cas, vous voulez le groupe 1.) –

1

Vous devez indiquer votre capture à l'aide parens comme ceci:

"user_id" => "(.*)" 

Vous pouvez ensuite localiser ce match. Utilisez-vous JavaScript, Perl, C#, ???

0

Le problème est que .* est gourmand - il saisit tout jusqu'à la dernière disponible " dans votre ligne/string (en fonction du mode que vous utilisez).

Qu'est-ce que vous avez besoin est soit:

A) Faire le regex non gourmand. .*? le fera dans certaines plateformes.
B) Spécifiquement exclure " de la liste de caractères que vous souhaitez correspondre: "user_id" => "([^"]*)" est ce que vous voulez alors.