匹配Java中的最后一组内容

时间:2014-05-24 18:38:58

标签: java regex

我有定义regexpression(对于Java程序)的问题,这给了我最后一个匹配的东西。原因是将一些文本文件(这里是:某些wiki的导出)转换为新wiki的新格式。

例如,当我有以下文字时:

Here another include: [[Include(a/a-1)]]

页面的层次结构是:

/a
  /a-1

旧维基引用了层次结构名称,新维基将只具有该页面的标题。新格式应如下所示:

{include:a-1}

目前我有以下正则表达式:

/\[\[Include\(([^\)]+)\)\]\]/

与上面示例a/a-1匹配,但我需要一个仅匹配a-1的正则表达式。

是否可以为仅与最后一个组匹配的java构造正则表达式?

因此对于以下原始行:

[[Include(a)]]
[[Include(a/b)]]
[[Include(a/a-1)]]
[[Include(a/a-1/a-2)]]

我想只匹配

a
b
a-1
a-2

1 个答案:

答案 0 :(得分:1)

这是你正在寻找的正则表达式。第1组包含所需的文本,请参阅demo右下角的“捕获”窗格以及底部的“替换”窗格。

编辑:根据您的请求,将[a-z0-9-]替换为[^/](未更新regex101演示,因为此regex已确认可用,在使用/的regex101中断作为分隔符,即使在转义/时也是如此。但是这里是regexplanet上的另一个demo

搜索:

\[\[Include\((?:[^/]+\/)*([^/]+)\)\]\]

替换:

{include:$1}

它是如何运作的?

在Include的开始括号之后,我们匹配a-1(由字母,短划线和数字组成)后跟正斜杠,零次或多次等字符组合,然后我们捕获最后一个这样的组合字符。

在支持无限宽度外观的少数语言中,我们可以匹配您想要的内容而不依赖于第1组捕获。