在PostgreSQL中使用正则表达式提取字符串的部分

4
我想提取first_namesecond_name字符串,但是使用这个正则表达式只能获取first_name字符串。
SELECT
   SUBSTRING (
      'a:2:{i:0;s:14:"first_name";i:1;s:15:"second_name";}',
      '\"[^\"]*\" '
   ) as obs_regex

如何修改我的正则表达式以获取名字 姓氏作为结果?

谢谢你。


我会使用 split_part() 来实现。 - user330315
你的问题解决了吗? - Wiktor Stribiżew
1个回答

4
你可以使用g标志来匹配多个出现次数,并且需要使用捕获组来获取没有引号的值:
SELECT
   REGEXP_MATCHES (
      'a:2:{i:0;s:14:"first_name";i:1;s:15:"second_name";}',
      '"([^"]*)"', 'g'
   ) as obs_regex

结果:

enter image description here

要获取匹配的连续字符串,您需要将regexp_matches结果“转换”为数组,并使用array_to_string
SELECT ARRAY_TO_STRING (
 ARRAY (
   SELECT REGEXP_MATCHES (
      'a:2:{i:0;s:14:"first_name";i:1;s:15:"second_name";}',
      '"([^"]*)"', 'g'
   )
 ), ' ') as obs_regex

结果:

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接