2016-10-23 1 views
-2

J'ai un problème. Je ne peux pas comprendre comment faire cette expression régulière [^:]+(?=,|$) il ne se trouve pas (» «)

J'ai besoin regex passer le jeton d'accès sans guillemets cette expression:

{"access_token":"UEaYoz4xgKQUyjHv9dg6nzaWN52jHbeGRymGVqdo6wd‌​WwXLjoxPydlNkXEOJYki‌​QpEXOHTo99Tn7i9Q-MHP‌​MFmnqmfLjel-0qVVpF1r‌​FxEiB_RtX3kMYm5-ihH7‌​OYB3aEzFvnQ_HsNevGlV‌​72AFKKJrhSP9V637SSYC‌​5MDzU4Wri0_uPW1VMuLu‌​q-IhtOPrSe0lqu86clal‌​ySuevFf5w_jcHPEm5xIx‌​R4pTzELfYluQiFS9JrAC‌​s5tF2d-WwkTZaYhjCf9M‌​Wx5JVqtMJC0x8shPvHZA‌​rH5Um1jpO12UHtRSU6P5‌​rP5VHuEk8AAQmDEv5EYh‌​59RI6jAWKtYRZMEBoJZO‌​UEbF9ZelPB4jYqpx4gsV‌​kP0GVJ57o_d3OiAllvOo‌​kY14u1GXZ3XN1fesOi89‌​srmatVf_J6ka50m9ilrW‌​tzMYWNq6vf2j-JgQA87R‌​80DTaRtCFfg"} 

Cette partie du jeton d'accès besoin de passer sans les guillemets:

UEaYoz4xgKQUyjHv9dg6nzaWN52jHbeGRymGVqdo6wd‌​WwXLjoxPydlNkXE‌​OJYki‌​QpEXOHTo99Tn7‌​i9Q-MHP‌​MFmnqmfLjel‌​-0qVVpF1r‌​FxEiB_RtX‌​3kMYm5-ihH7‌​OYB3aEz‌​FvnQ_HsNevGlV‌​72AFK‌​KJrhSP9V637SSYC‌​5MD‌​zU4Wri0_uPW1VMuLu‌​q‌​-IhtOPrSe0lqu86clal‌‌​​ySuevFf5w_jcHPEm5xI‌​x‌​R4pTzELfYluQiFS9J‌​rAC‌​s5tF2d-WwkTZaYh‌​jCf9M‌​Wx5JVqtMJC0x8‌​shPvHZA‌​rH5Um1jpO12‌​UHtRSU6P5‌​rP5VHuEk8‌​AAQmDEv5EYh‌​59RI6jA‌​WKtYRZMEBoJZO‌​UEbF9‌​ZelPB4jYqpx4gsV‌​kP0‌​GVJ57o_d3OiAllvOo‌​k‌​Y14u1GXZ3XN1fesOi89‌‌​​srmatVf_J6ka50m9ilr‌​W‌​tzMYWNq6vf2j-JgQA‌​87R‌​80DTaRtCFfg 
+0

Pouvez-vous codez poster exemple et la sortie désirée de la regex? –

+0

Le problème sous-jacent que vous essayez d'interpréter JSON à l'aide de regex? Vous devriez probablement utiliser un analyseur JSON pour cela. [Cet article de blog] (http://eclipsesource.com/blogs/2014/06/12/parsing-json-responses-with-jmeter/) parle de différentes façons d'analyser JSON en utilisant jmeter. –

+0

J'ai mis à jour votre question en fonction de vos commentaires, et les ai marqués comme obsolètes. La prochaine fois, s'il vous plaît [modifier] vos questions - il doit se tenir tout seul, même sans les commentaires. Et c'est * encore * très difficile à comprendre. Si vous avez du mal à exprimer votre question en anglais, vous devriez peut-être trouver un site où vous pouvez le demander dans votre propre langue. (Deviner en fonction de votre nom, même si je sais que c'est un tronçon, peut-être que vous pourriez essayer https://ru.stackoverflow.com/) – tripleee

Répondre

0

Si vous voulez dire [^: "{}]+ alors vous devez dire. Cela correspond à toute chaîne qui ne contient aucun des quatre caractères énumérés. Il correspondra toujours au match le plus long le plus à gauche, vous devrez donc ancrer le match d'une manière ou d'une autre. Sur la base de votre exemple, je suppose que vous êtes vraiment à la recherche

[^:"[{}]+(?="?([},])) 

qui correspond à la chaîne la plus longue gauche de caractères pas dans la classe de caractères qui se produisent juste avant un guillemet en option suivie soit par une accolade fermante ou une virgule .

Comme d'autres déjà noté dans les commentaires, l'utilisation de regex pour analyser JSON est généralement une très mauvaise idée. Il y a beaucoup de cas d'angle où ceci échouera; pour commencer, le JSON pourrait être divisé sur plusieurs lignes, de sorte que l'accolade ou la virgule ne soit pas sur la même ligne que le jeton d'accès, et l'extraire par cette expression régulière échouera.

1

Vous faites des choses sur compliqué, JMeter soutient Perl5-style regular expressions, cela signifie que vous pouvez faire la citation marque une partie du motif de recherche afin qu'ils soient considérés comme les limites gauche et à droite comme:

"access_token":"(.+?)" 

À l'avenir quand il s'agit de JSON, il est plus logique d'utiliser JSON Path PostProcessor disponible depuis JMeter 3.0. La requête JSONPath pertinente sera aussi simple que:

$.access_token 

Pour apprendre à développer des requêtes plus complexes JSONPath voir Advanced Usage of the JSON Path Extractor in JMeter Guide

+0

Vous pouvez toujours utiliser' ([^ "] +)' dans l'expression rationnelle. – tripleee