【问题标题】:Returning overlapping regular expressions返回重叠的正则表达式
【发布时间】:2011-10-13 20:39:20
【问题描述】:

是否有一个正则表达式可以捕获一个表达式的所有实例,无论它们是否重叠?

例如在/abc/def/ghi 中,如果我想捕获以/ 开头的所有字符串。正则表达式 (/.*) 只返回整个字符串,但我希望它也匹配 /def/ghi/ghi

【问题讨论】:

  • 有趣的主题。可以肯定的是,仅匹配 /abc/def/ghi 不是您想要的,不是吗?
  • @Arjan 不,不是。那太容易了!
  • 我发现(?=(/.*)) 可以解决问题,另请参阅[重叠匹配][1] [1]:stackoverflow.com/q/320448/653295

标签: java regex


【解决方案1】:

当然,匹配一个空字符串并在其后放置一个前瞻,在捕获组中捕获/.*

Matcher m = Pattern.compile("(?=(/.*))").matcher("/abc/def/ghi");
while(m.find()) {
  System.out.println(m.group(1));
}

将打印:

/abc/def/ghi
/def/ghi
/ghi

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-11
    • 2018-08-09
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-22
    相关资源
    最近更新 更多