检索字符串的一部分,从一个单词到另一个单词或到末尾

我的文件中有以下几行:

/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.*|$)非常适合我的条件。


繁华开满天机
浏览 91回答 2
2回答

慕侠2389804

这里不需要任何花哨的东西,只需使用这个正则表达式并使用捕获组#1:/rootfolder(.*?)(?:/magicword.*|$)正则表达式演示非捕获组(?:/magicword.*|$)匹配行尾或/magicword行后的其余部分.*?(惰性匹配)。

慕森王

Java不支持分支重置组(?|您可以使用可选的非捕获来匹配 from /rootfolderto/magicword并在内部使用与之前的捕获组匹配的捕获组来简化表达式/magicword^/rootfolder(?:(.*?)/magicword)?.*$正则表达式演示
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java