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

时间:2012-06-19 13:08:43

标签: java regex

我有这样的字符串:

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");

2 个答案:

答案 0 :(得分:5)

添加以下内容:

  • |之外的任何内容零次或多次:[^|]*
  • ...后跟||
  • ...可选:?
  • 如果您不想捕获该内容,请使用(?: ... )对其进行分组。

这是一个完整的例子:

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

答案 1 :(得分:0)

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