regexp匹配特定查询

时间:2017-06-27 07:07:19

标签: regex bash

我有一个PostgreSQL查询,它提供以下类型的输出:

<number> | [<empty_body>] <number> [<some_stuff>,"id":<ID>]
例如

5 | [] 7 ["id":6]

所以 我想得到:

 5 "" and 7 "6"

8 | ["id" 9]  15 ["id" 18]  

我希望得到:

8 "9" and 15 "18"

如何编写一些将返回<number>和&#34; id&#34;的正则表达式如果它存在。

1 个答案:

答案 0 :(得分:1)

你的输出模式是这样的:

 (\d+)\s*\|?\s*\[(?:"id"\:?\s*|)(|\d+)\]

在第一个匹配组和第二个匹配组中查找。 See Online

Full match  0-6 `5 | []`
Group 1.    0-1 `5`
Group 2.    5-5 ``
Match 2
Full match  7-17    `7 ["id":6]`
Group 1.    7-8 `7`
Group 2.    15-16   `6`
Match 3
Full match  22-34   `8 | ["id" 9]`
Group 1.    22-23   `8`
Group 2.    32-33   `9`
Match 4
Full match  36-48   `15 ["id" 18]`
Group 1.    36-38   `15`
Group 2.    45-47   `18`

如果数组包含其他一些键值,请尝试使用此正则表达式:

(\d+)\s*\|?\s*\[.*?(?:"id"\:?\s*|)(|\d+\b)[^\d]*?\]

Demo