我在文件中的以下几行:

/rootfolder/test/a/b/c/magicword/blabla
/rootfolder/test/a/b/c

所有这些线应该符合一个正则表达式。 此外,我需要找到/rootfolder/magicword之间的一组或者如果没有/magicword - 至死不渝。 所以,我的上面两行,第一组应该是/test/a/b/c

我曾尝试/rootfolder(?|(?>(/.*)(?>/magicword).*)|(/.*))(与/逃逸)。它可以很好地用于一些在线的正则表达式验证,但至今没有运气在Java使用它。

是否有机会使用Java做出这样的正则表达式? 提前致谢!

编辑: 工作正则表达式的例子:https://regex101.com/r/cJkIJH/1。同样的结果,我需要在Java。

EDIT2: 由于下面的答案看起来像/rootfolder(.*?)(?:/magicword.*|$)完全适用于我的条件。

分析解答

你不需要任何幻想这里只是用这个表达式与捕获组#1的工作:

/rootfolder(.*?)(?:/magicword|$)

正则表达式Demo

Non-capturing组(?:/magicword|$)匹配.*?(懒惰匹配)后线或/magicword结束。