首页 > 解决方案 > 如何在正则表达式匹配中也获取字符串的其余部分?

问题描述

我有以下字符串:

this is a test string user:testuser,anotheruser hashtag:peach,phone,milk site:youtube.com,twitter.com flair:bobby

目前,正则表达式([^:\s]+):([^:\s]+)匹配所有中间有冒号的过滤器(用户、主题标签、站点、天赋)。我怎样才能将剩余的"this is a test string"部分作为另一场比赛?

演示:

https://regex101.com/r/L0T2GJ/11

标签: regexregex-group

解决方案


您可以添加一个替代方法,以尽可能少地匹配任何 0+ 个字符,从字符串的开头到第一个键后跟一个冒号:

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

查看正则表达式演示

细节

  • ^- 字符串的开头 - .*?- 除换行符之外的任何 0+ 个字符,尽可能少
  • (?=\s+[^:\s]+:)- 正向前瞻确保在当前位置的右侧,有
    • \s+- 1+ 空格
    • [^:\s]+:- 除了和空格之外的 1+ 个字符
    • :- 一个冒号

推荐阅读