带有可选字符串的Java正则表达式模式 [英] Java regex pattern with optional string

查看:140
本文介绍了带有可选字符串的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆