带有可选字符串的Java正则表达式模式

我有这样的字符串:

something something [[abcd]] blah blah something something [[xyz|abcd]] blah blah 

在这两种情况下我想要的是:

 something something abcd blah blah 

如何在Java中仅使用1个正则表达式模式? 我可以用这个做第一个案例:

 Pattern pattern = Pattern.compile("\\[\\[(.+?)\\]\\]"); Matcher m = patternLinkRemoval.matcher(text); return m.replaceAll("$1"); 

添加以下内容:

  • 什么除了| 零次或多次: [^|]*
  • ……后跟一个||
  • ……可选: ?
  • 如果你不想捕获它,可以使用(?: ... )对它进行分组。

这是一个完整的例子:

 String text1 = "something something [[abcd]] blah blah"; String text2 = "something something [[xyz|abcd]] blah blah"; Pattern pattern = Pattern.compile("\\[\\[(?:[^|]*\\|)?(.+?)\\]\\]"); System.out.println(pattern.matcher(text1).replaceAll("$1")); System.out.println(pattern.matcher(text2).replaceAll("$1")); 

输出:

 something something abcd blah blah something something abcd blah blah 

自己找到了! \\[\\[(?:.+?\\|)?(.+?)\\]\\]