Sql 用于查找uuid和文本的Regex
我有一个字符串,看起来像这样:Sql 用于查找uuid和文本的Regex,sql,regex,postgresql,Sql,Regex,Postgresql,我有一个字符串,看起来像这样: "name=Guy&Id=e8679b5a-bf27-46c6-aaf0-ef0eced1945e&Family.Id=e8679b5a-bf27-46c6-aaf0-ef0eced1945e,aaa79b5a-bf27-46c6-aaf0-ef0eced1945e,eee79b5a-bf27-46c6-aaf0-ef0eced1945e&Children.Id=bbb79b5a-bf27-46c6-aaf0-ef0eced1945e,cc
"name=Guy&Id=e8679b5a-bf27-46c6-aaf0-ef0eced1945e&Family.Id=e8679b5a-bf27-46c6-aaf0-ef0eced1945e,aaa79b5a-bf27-46c6-aaf0-ef0eced1945e,eee79b5a-bf27-46c6-aaf0-ef0eced1945e&Children.Id=bbb79b5a-bf27-46c6-aaf0-ef0eced1945e,ccc79b5a-bf27-46c6-aaf0-ef0eced1945e,ddd79b5a-bf27-46c6-aaf0-ef0eced1945e&Father.Id=fff79b5a-bf27-46c6-aaf0-ef0eced1945e"
我希望有一个正则表达式,可以找到所有组合(String.Id及其UUID),如:
我正试图在PostgreSQL中解析它,目前我可以解析其中一些,但不是全部:
SELECT
regexp_matches('"name=Guy&Id=e8679b5a-bf27-46c6-aaf0-ef0eced1945e&Family.Id=e8679b5a-bf27-46c6-aaf0-ef0eced1945e,aaa79b5a-bf27-46c6-aaf0-ef0eced1945e,vvv79b5a-bf27-46c6-aaf0-ef0eced1945e&Children.Id=bbb79b5a-bf27-46c6-aaf0-ef0eced1945e,ccc79b5a-bf27-46c6-aaf0-ef0eced1945e,ddd79b5a-bf27-46c6-aaf0-ef0eced1945e&Father.Id=fff79b5a-bf27-46c6-aaf0-ef0eced1945e"'
,'&(\w*)\.Id=([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})', 'g')::text
谢谢您可以使用:
替换为:
$1 | $2\n
它的作用是:
首先,它查找可选出现的name=[^&]+&Id=[^&]+
,即name=
,后跟至少一个非&
字符([^&]+
),后跟&Id=
,后跟至少一个非&
字符([^&]+
)。这都被包装在一个非捕获组(?:…)
,后面跟着一个?
,表示该组是可选的
正则表达式的其余部分查找
&
,然后是第一个捕获组($1
),该组至少包含一个字母字符(([a-zA-Z]+)
),然后是.Id=
,然后是第二个捕获组($2
),至少包含一个非&
字符(([^&]+
).您使用的是什么语言/工具?我试图在postgreSQL中使用这个正则表达式,但任何语言都应该可以:)即使在这里:从一个记录到多个记录在任何类型的SQL中都可能很棘手。我用我已经编写的内容更新了这个问题,但我只得到一个UUID,我需要的部分也会考虑逗号。不要让数据库做一个应用程序语言可以做的更容易和更好。
(?:name=[^&]+&Id=[^&]+)?&([a-zA-Z]+).Id=([^&]+)
$1 | $2\n