【发布时间】:2012-06-11 13:25:36
【问题描述】:
我正在使用 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/ 来测试 RegEx
【问题讨论】:
-
尝试添加一个?在这样的集合中:
(.*?) -
谢谢 Tyler,但还是太贪心了。
-
尝试使用
\S+?或者做这样的事情:[\w\d]+?
标签: regex json testing assertion