我正在使用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个十六进制字符,因此我想用更合适的内容替换(.*)
。
答案 0 :(得分:3)
您可以使用[^"]*
,[^"]{24}
或[0-9a-fA-F]{24}
代替.*
作为您的ID字段。
答案 1 :(得分:3)
.
(点)将匹配任何内容,因为RegEx中的点是与任何单个字符匹配的特殊字符(异常是换行符)。
您应该使用此RegEx仅匹配24个十六进制字符:
^[A-Fa-f0-9]{24}$
和平