如何制作这个正则表达式[^:] +(?=,| $)所以找不到它("")

时间:2016-10-23 16:10:16

标签: regex jmeter expression extractor

我遇到了问题。我无法理解如何制作这个正则表达式[^:]+(?=,|$)所以找不到它("")

我需要正则表达式来传递访问令牌而不使用引号这个表达式:

{"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"}

这部分访问令牌需要通过而不需要引号:

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

2 个答案:

答案 0 :(得分:1)

你正在使事情变得复杂,JMeter支持Perl5-style regular expressions,这意味着你可以使引号成为搜索模式的一部分,因此它们将被视为左右边界,如:

"access_token":"(.+?)"

在JSON方面,从JMeter 3.0开始使用JSON Path PostProcessor更有意义。相关的JSONPath查询将非常简单:

$.access_token

要了解如何开发更复杂的JSONPath查询,请参阅Advanced Usage of the JSON Path Extractor in JMeter指南

答案 1 :(得分:0)

如果您的意思是[^: "{}]+,那么您必须这样说。这匹配任何不包含四个枚举字符的字符串。它仍将仅匹配最左边的最长匹配,因此您需要以某种方式锚定匹配。根据你的例子,我猜你真的在寻找

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

匹配不在字符类中的最长最左边的字符串,这些字符出现在可选的双引号之后,后跟括号或逗号。

正如其他人已在评论中指出的那样,使用正则表达式来解析JSON通常是一个非常糟糕的主意。有许多极端情况会导致失败;首先,JSON可以拆分为多行,这样大括号或逗号与访问令牌不在同一行,然后通过此正则表达式提取它将失败。