正则表达式匹配所有内容直到字符序列

时间:2017-04-07 14:05:53

标签: regex regex-lookarounds impala regex-greedy regex-group

我正在尝试提取部分json消息,但未能编写正确的正则表达式。

最大的问题是我为此编写的应用程序(Impala - 大数据查询引擎)包含一个使用?阻止非贪婪操作的错误,因此我需要一个不同的解决方案。

实施例

{"postcode":"ABCDEF","forename":"James","id":"{12}","surname":"Townsend"},
{"postcode":"HIJKLM","forename":"Toby","id":"{34}","surname":"Taylor"},
{"surname":"Reilly","postcode":"NOPQRS","forename":"Mike","id":"{56}"}

数据将采用这种格式全部在一个字符串中(没有换行符),但在每个"部分"数据可以按任何顺序排列。

我需要使用正则表达式来结束消息的名称为" Toby"

的部分
{"postcode":"HIJKLM","forename":"Toby","id":"{34}","surname":"Taylor"}

目前我有

{[^{]*"forename":"Toby"[^}]*}

然而,这不起作用,我需要它来匹配{""}作为开始和结束。

有人可以就如何做到这一点提出建议吗?

由于

1 个答案:

答案 0 :(得分:0)

转义前导/尾随花括号:

\{[^{]*"forename":"Toby"([^}]|\}(?="))*\}(?!")

请参阅live demo