为什么这个postgres regexp_match给我null而不是regex组?

时间:2019-10-19 01:47:55

标签: regex postgresql regex-group postgres-9.6

此:

select regexp_matches('test text user:testuser,anotheruser hashtag:peach,phone,milk site:youtube.com,twitter.com flair:?bobby?', '^.*?(?=\s+[^:\s]+:)|([^:\s]+):([^:\s]+)','gi');

仅给我一组匹配项,并且一行为NULL:

regexp_matches  
-----------------
 {NULL,NULL}
 {flair,?bobby?}

当我在这里对其进行测试时,它工作正常:

https://regex101.com/r/AxsatL/3

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

您可以使用

'^(?:(?!\s+[^:\s]+:).)*|[^:\s]+:[^:\s]+'

这里的重点是使所有量词保持贪婪并删除所有捕获括号。

^(?:(?!\s+[^:\s]+:).)*部分将从字符串开头开始匹配任何出现0个或更多字符的字符,这些字符不会开始以下模式的序列:1+个空格,1 +个除{{之外的字符1}}和空格,然后是:

Online test

:

结果:

enter image description here