我有定义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
答案 0 :(得分:1)
这是你正在寻找的正则表达式。第1组包含所需的文本,请参阅demo右下角的“捕获”窗格以及底部的“替换”窗格。
编辑:根据您的请求,将[a-z0-9-]
替换为[^/]
(未更新regex101演示,因为此regex已确认可用,在使用/
的regex101中断作为分隔符,即使在转义/
时也是如此。但是这里是regexplanet上的另一个demo
搜索:
\[\[Include\((?:[^/]+\/)*([^/]+)\)\]\]
替换:
{include:$1}
它是如何运作的?
在Include的开始括号之后,我们匹配a-1(由字母,短划线和数字组成)后跟正斜杠,零次或多次等字符组合,然后我们捕获最后一个这样的组合字符。
在支持无限宽度外观的少数语言中,我们可以匹配您想要的内容而不依赖于第1组捕获。