带有可选字符串的Java正则表达式模式 [英] Java regex pattern with optional string
本文介绍了带有可选字符串的Java正则表达式模式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有这样的字符串:
something something [[abcd]] blah blah
something something [[xyz|abcd]] blah blah
在这两种情况下我想要的是:
What I want in both cases is:
something something abcd blah blah
如何在Java中仅使用1个正则表达式模式?我可以做第一个案例:
How do I do this using only 1 regex pattern in Java? I can do the first case with this:
Pattern pattern = Pattern.compile("\\[\\[(.+?)\\]\\]");
Matcher m = patternLinkRemoval.matcher(text);
return m.replaceAll("$1");
推荐答案
添加以下内容:
- 除
|
以外的任何东西零次或多次:[^ |] *
- ...后跟
|
:|
- ...可选:
?
- 使用
对其进行分组(?:...)
如果你不想捕捉东西。
- Anything except
|
zero or more times:[^|]*
- ...followed by a
|
:|
- ...optionally:
?
- Group it using
(?: ... )
if you don't want to capture the thing.
这是一个完整示例:
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
这篇关于带有可选字符串的Java正则表达式模式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文