【问题标题】:RegEx for 15 character alpha-numeric character within JSONJSON 中 15 个字符的字母数字字符的 RegEx
【发布时间】: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 个十六进制字符,我想将 (.*) 替换为更合适的内容。

【问题讨论】:

  • 尝试添加一个?在这样的集合中:(.*?)
  • 谢谢 Tyler,但还是太贪心了。
  • 尝试使用\S+?或者做这样的事情:[\w\d]+?

标签: regex json testing assertion


【解决方案1】:

您可以在 ID 字段中使用 [^"]*[^"]{24}[0-9a-fA-F]{24} 而不是 .*

【讨论】:

    【解决方案2】:

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

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

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

    和平

    【讨论】:

      猜你喜欢
      • 2017-09-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多