Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有可选字符串的Java正则表达式模式_Java_Regex - Fatal编程技术网

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

带有可选字符串的Java正则表达式模式,java,regex,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

我有这样的字符串:

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

我自己找到的<代码>\\[\\[(?:.+?\\\\\\\)?(.+?)\]\\]\]

看起来您正在尝试解析MediaWiki语法-可能来自的解析器是一个更好的选择,因为MediaWiki有很多奇怪的边缘情况。看起来是一个有用的源代码。谢谢Sweble看起来相当不错:如果您使用Eclipse,请查看此插件:我发现它非常有用,尤其是在“设计”正则表达式时。感谢您接受您的答案,而不是我的答案,以便快速响应!。。。我想把replaceAll改成2美元。@Disco3,
(?:…)
不能捕获任何东西。