此:
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
我在做什么错了?
答案 0 :(得分:0)
您可以使用
'^(?:(?!\s+[^:\s]+:).)*|[^:\s]+:[^:\s]+'
这里的重点是使所有量词保持贪婪并删除所有捕获括号。
^(?:(?!\s+[^:\s]+:).)*
部分将从字符串开头开始匹配任何出现0个或更多字符的字符,这些字符不会开始以下模式的序列:1+个空格,1 +个除{{之外的字符1}}和空格,然后是:
。
:
结果: