带有可选字符串的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,
(?:…)
不能捕获任何东西。