-2

我有问题。我不明白如何制作这个正则表达式 [^:]+(?=,|$)所以找不到 (" ")

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

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

2 回答 2

1

你把事情弄复杂了,JMeter 支持Perl5 风格的正则表达式,这意味着你可以让引号成为搜索模式的一部分,所以它们将被视为左右边界,如:

"access_token":"(.+?)"

展望未来,当涉及到 JSON 时,使用自 JMeter 3.0 起可用的JSON Path PostProcessor会更有意义。相关的JSONPath查询将非常简单:

$.access_token

要了解如何开发更复杂的 JSONPath 查询,请参阅JMeter指南中 JSON 路径提取器的高级用法

于 2016-10-24T04:21:33.950 回答
0

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

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

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

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

于 2016-10-23T16:36:41.707 回答