【问题标题】:Find Json values with Regex: Matching string, then any number of characters and then value after second matching string使用正则表达式查找 Json 值:匹配字符串,然后是任意数量的字符,然后是第二个匹配字符串之后的值
【发布时间】:2021-02-22 06:05:35
【问题描述】:

我正在尝试从 Java 代码中的有效负载中提取 Json 值。 所以我有

"{"object":"page","entry":[{"id":"111111111111111","messaging":[{"sender":{"id":"49783635606516156", "options":"TETX_ARRAY"},"recipient":{"id":"111111111111111"},"message":{"mid":"m_secret","text":"\/start"}}]}]}";

但也有可能

"{"object":"page","entry":[{"id":"111111111111111","messaging":[{"sender":{"options":"TETX_ARRAY", "id":"49783635606516156"},"recipient":{"id":"111111111111111"},"message":{"mid":"m_secret","text":"\/start"}}]}]}";

我需要提取“sender”-“id”值。

我试过这个正则表达式"sender\":.*\"id\":\"([^\"]+)";(“发件人”之后任意数量的字符后的第一个“id”字),但它不起作用。

什么是正确的正则表达式?

谢谢!

【问题讨论】:

标签: java json regex


【解决方案1】:

如果您想使用正则表达式,您可以尝试以下方法: "sender":.*?"id":"(?<senderId>\d+)"

  • 这会搜索“发件人”("sender":)
  • 然后在“发件人”(.*?"id":") 之后搜索第一次出现的“id:”
  • 最后将值提取到命名组“senderId”((?<senderId>\d+))

示例:https://regex101.com/r/UiJZih/1/

请注意,这很容易出错(想象一下 json 中有一些额外的空格会破坏正则表达式)。当然,正则表达式可以进一步改进,但我想你永远不会得到所有的边缘情况。

话虽如此,您应该更喜欢使用 JSON 解析器来提取所需的信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    • 2023-02-23
    • 2017-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多