带有可选字符串的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
自己找到了! \\[\\[(?:.+?\\|)?(.+?)\\]\\]