1

我正在使用 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所有其他不需要的对象。

~id所以我想我需要让我的 RegEx 在字段方面更加严格。由于 ID 始终是 24 个十六进制字符,我想(.*)用更合适的东西替换。

4

2 回答 2

3

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

于 2012-06-11T13:32:12.700 回答
3

.正则表达式中的 (dot) 将匹配任何内容,因为 RegEx 中的点是匹配任何单个字符的特殊字符(换行符除外)。

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

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

和平

于 2012-06-11T13:39:44.490 回答