【问题标题】:Regex to find UUIDs and Text正则表达式查找 UUID 和文本
【发布时间】:2017-08-07 03:33:39
【问题描述】:

我有一个看起来像这样的字符串:

"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),例如:

Family | e8679b5a-bf27-46c6-aaf0-ef0eced1945e,aaa79b5a-bf27-46c6-aaf0-ef0eced1945e,vvv79b5a-bf27-46c6-aaf0-ef0eced1945e
Children | bbb79b5a-bf27-46c6-aaf0-ef0eced1945e,ccc79b5a-bf27-46c6-aaf0- ef0eced1945e,ddd79b5a-bf27-46c6-aaf0-ef0eced1945e
Father | fff79b5a-bf27-46c6-aaf0-ef0eced1945e

我正在尝试在 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

谢谢

【问题讨论】:

  • 您使用什么语言/工具?
  • 我正在尝试在 postgreSQL 中执行此正则表达式,但任何语言都应该没问题 :) 即使在这里:regex101.com
  • 从一条记录变为多条记录在任何 SQL 风格中都可能很棘手。
  • 我用我已经写过的东西更新了这个问题,但我只得到一个 UUID,我需要考虑逗号的部分。
  • 不要让数据库做应用语言可以做的更容易和更好的事情。

标签: sql regex postgresql


【解决方案1】:

你可以使用regex like so:

(?:name=[^&]+&Id=[^&]+)?&([a-zA-Z]+).Id=([^&]+)

替换为:

$1 | $2\n

它的作用:

首先它查找name=[^&]+&Id=[^&]+ 的可选匹配项,即name=,后跟至少一个非& 字符([^&]+),然后是&Id=,后跟至少一个非@ 987654329@ 字符 ([^&]+)。这全都包裹在一个非捕获组(?: ... ) 中,后面跟着一个? 表示该组是可选的。

正则表达式的其余部分,查找 &,然后是包含至少一个字母字符 (([a-zA-Z]+)) 的第一个捕获组 ($1),然后是 .Id=,然后是第二个捕获组 ($2) 至少包含一个非 & 字符 (([^&]+))。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-11
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    • 2021-06-20
    • 2011-07-24
    • 1970-01-01
    • 2017-10-22
    相关资源
    最近更新 更多