0
import java.util.regex.Matcher;
import java.util.regex.Pattern;

    public class Regex {

        public static void main(String args[]){     

            Pattern p = Pattern.compile(".*?(cat).*?(dog)?.*?(tiger)");
            String input = "The cat is a tiger";
            Matcher m = p.matcher(input);
            StringBuffer str = new StringBuffer();
            if (m.find()) {

            //In the output i want to replace input string with group 3 with group 1 value and group 2 with cow. Though group2 is present or not.
//i.e. group 2 is null
            }
        }
    }

Java で正規表現を使用して入力文字列をキャプチャされたグループの特定の値に置き換えることが可能かどうかを知りたいです。

助けてください

4

2 に答える 2

0
Pattern p = Pattern.compile("(cat)(.*?)(dog)?(.*?)(tiger)");
String input = "The cat is a tiger";
Matcher m = p.matcher(input);
StringBuffer str = new StringBuffer();
while(m.find())
{
  m.appendReplacement(str, "$5$2$3$4$1");
}
m.appendTail(str);
System.out.println(str);

ところで、犬がいるかどうかが問題ではない場合は、次のように単純化できます。

Pattern p = Pattern.compile("(cat)(.*?)(tiger)");
String input = "The cat is a tiger";
Matcher m = p.matcher(input);
StringBuffer str = new StringBuffer();
while(m.find())
{
  m.appendReplacement(str, "$3$2$1");
}
m.appendTail(str);
于 2013-11-06T11:31:00.030 に答える
0

String クラスのreplaceおよびreplaceAllメソッドは、これを行うための最良の方法です。検索引数として正規表現文字列をサポートしています。

于 2013-11-06T10:58:44.050 に答える