我正在使用 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 个十六进制字符,因此我想用更合适的内容替换 (.*)
。
- 我正在 Go 中写这篇文章,因此使用 Go 的 RegExp包。
- 我正在使用 http://regexpal.com/测试正则表达式
最佳答案
您可以使用 [^"]*
、[^"]{24}
或 [0-9a-fA-F]{24}
而不是 .*
用于您的 ID 字段。
关于JSON 中 15 个字符的字母数字字符的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10981012/