2010-09-17 1 views
2

J'ai une charge de données Jibberish avec cela quelque part au milieu:troubles d'expression réguliers, ne semblent pas correspondre à ce que je veux

"video_id": "hGosI8rBVe8" 

Et cela, je veux extraire hGosI8rBVe8. Notez que ce que je veux extraire peut être de n'importe quelle longueur, et peut inclure des lettres majuscules/minuscules et des nombres. Voilà ce que j'ai essayé jusqu'à présent:

"video_id": "(.*)" 

et:

"video_id": "([a-zA-Z0-9]*)" 

Mais ils portent sur l'adéquation entre le chemin passé "à la fin de ce que je veux retour, je suis sûr que cela. est à cause de la * (gourmand) ... mais je ne vois pas d'autre façon de le faire parce que ce que je veux retourné sera de longueur variable.

Toute aide est appréciée, acclamations.

+2

Avec vos exemples, ça marcherait. Vous devez donc montrer (a) comment vous faites l'appariement et (b) précisément l'entrée qui échoue. Sans cela, vous n'obtiendrez pas de bonnes réponses. –

+0

pourquoi dites-vous que la deuxième regex a échoué en raison de la gourmandise? Il n'y a pas de citation dans la classe de personnage, donc aucun moyen de dépasser cette citation. – paxdiablo

Répondre

3

Make It ungre Edy en ajoutant le ?

"video_id": "([a-zA-Z0-9]+?)" 

I aussi changé *-+ que le premier est de 0 ou plus, et celle-ci est de 1 ou plus. Ce qui est plus approprié dans ce cas.

+0

Ah, alors '?' En fait un match paresseux ... bon à savoir, merci! :) – Wen

+0

"+?" Ne correspondra-t-il pas au maximum à un caractère? – dreamlax

+0

Je viens de l'essayer et cela fonctionne parfaitement, mais je peux voir pourquoi vous pouvez le penser et honnêtement je ne sais pas: P – Wen

3

Le "video_id": "([a-zA-Z0-9]*)" ne doit pas correspondre au-delà de la fermeture " simplement parce que cela n'est pas inclus dans la classe de caractères [a-zA-Z0-9]. Je ne suis pas sûr de savoir pourquoi vous pensez que ça le fait.

Cependant, le .*sera match de caractères si disponible prochainement pour que l'application de la "(.*)" regex à My name is "Pax" and yours is "George" vous obtiendrez:

Pax" and yours is "George 

Si vous avez un moteur de regex qui ne supporte pas les non-greediness, vous pouvez utiliser:

"video_id": "([^"]*)" 

qui sera essentiellement correspondre " suivi par le nombre maximum de non " caractères, suivi de " à nouveau.

Questions connexes