5

次のような文字列があります。

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");
4

2 に答える 2

7

以下を追加します。

  • |ゼロ回以上以外:[^|]*
  • ... が続きます|:|
  • ...オプション:?
  • (?: ... )ものをキャプチャしたくない場合は、それを使用してグループ化します。

完全な例を次に示します。

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
于 2012-06-19T13:11:59.970 に答える
0

自分で見つけた!\\[\\[(?:.+?\\|)?(.+?)\\]\\]

于 2012-06-19T13:15:17.497 に答える