RegEx,用于JSON中的15个字符的字母数字字符

时间:2012-06-11 13:25:36

标签: regex json testing assertion

我正在使用RegEx断言API调用的响应,但它目前有点过于“贪婪”并最终匹配所有类型的响应。需要RegEx位,因为响应中的实际ID每次都不同。

RegEx断言是这样的:

{data:\[{"name":"Mat","~id":"(.*)"},{"name":"Laurie","~id":"(.*)"}\]},"something":true}

哪个符合这个正确答案:

{data:[{"name":"Mat","~id":"4fd5ec146fc2ee0fff234234"},{"name":"Laurie","~id":"4fd5ec146fc2ee0fff234227"}]},"something":true}

以及不正确的回复:

{data:[{"name":"Mat","~id":"4fd5ec146fc2ee0fff234234"},{"name":"Laurie","~id":"4fd5ec146fc2ee0fff234227"},{"name":"John","~id":"4fd5ec146fc2ee0fff234237"},{"name":"Paul","~id":"4fd5ec146fc2ee0fff234238"},{"name":"George","~id":"4fd5ec146fc2ee0fff234239"}]},"something":true}

第二个(.*)不只是匹配第二个项目的ID,而是匹配ID 所有其他不需要的对象。

所以我想我需要让我的RegEx在~id字段方面更严格一些。由于ID始终为24个十六进制字符,因此我想用更合适的内容替换(.*)

2 个答案:

答案 0 :(得分:3)

您可以使用[^"]*[^"]{24}[0-9a-fA-F]{24}代替.*作为您的ID字段。

答案 1 :(得分:3)

正则表达式中的

.(点)将匹配任何内容,因为RegEx中的点是与任何单个字符匹配的特殊字符(异常是换行符)。

您应该使用此RegEx仅匹配24个十六进制字符:

^[A-Fa-f0-9]{24}$

和平