Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java正则表达式替换为捕获长度_Java_Regex - Fatal编程技术网

Java正则表达式替换为捕获长度

Java正则表达式替换为捕获长度,java,regex,Java,Regex,我想要结果:pw:******(abc)必须是*x5 星号的数量等于匹配内容的长度 我可以使用String.replaceFirst或String.replaceAll实现它的唯一方法吗?您可以这样做: String pw="pw:(abc)";//Maybe "pw:(12)","pw:(ab123)"... pw=pw.replaceFirst("\\(.+\\)", "*"); //pw == result:pw:* String resultString = null; try {

我想要结果:
pw:******
<代码>(abc)必须是
*
x5

星号的数量等于匹配内容的长度

我可以使用
String.replaceFirst
String.replaceAll
实现它的唯一方法吗?

您可以这样做:

String pw="pw:(abc)";//Maybe "pw:(12)","pw:(ab123)"...
pw=pw.replaceFirst("\\(.+\\)", "*");

//pw == result:pw:*
String resultString = null;
try {
    Pattern regex = Pattern.compile( "pw:\\((.*?)\\)", Pattern.CANON_EQ );
    Matcher regexMatcher = regex.matcher( subjectString );
    if (regexMatcher.find()) {
        resultString = regexMatcher.group();
        return resultString.length();
    } 
} catch (PatternSyntaxException ex) {
    // Syntax error in the regular expression
}
这将导致:

final String pw = "pw:(abc)";

final String anon = pw.replaceAll("[^pw:]", "*");

System.out.println(pw);
System.out.println(anon);
编辑:如果密码中有p/w/:则不起作用。。。我将设法解决

编辑#2:结果比我想象的要难,必须采用另一种方法:

pw:(abc)
pw:*****
因此,首先找到由“({something})”组成的字符串。然后创建一个由该字符串中的星星数组成的字符串。然后用输入中的星号替换字符串

注意:如果密码或后面的文本包含paranthes,则此选项不起作用,但我再次怀疑您是否会找到这样的正则表达式。

您可以执行以下操作:

String resultString = null;
try {
    Pattern regex = Pattern.compile( "pw:\\((.*?)\\)", Pattern.CANON_EQ );
    Matcher regexMatcher = regex.matcher( subjectString );
    if (regexMatcher.find()) {
        resultString = regexMatcher.group();
        return resultString.length();
    } 
} catch (PatternSyntaxException ex) {
    // Syntax error in the regular expression
}
    final String input = "pw:(abc) something!";

    Matcher matcher = Pattern.compile("\\(.*\\)").matcher(input);

    if (matcher.find()) {
        final String onlyPw = matcher.group();
        final String stars = StringUtils.repeat("*", onlyPw.length());

        System.out.println(input.replace(onlyPw, stars));
    }
这将导致:

final String pw = "pw:(abc)";

final String anon = pw.replaceAll("[^pw:]", "*");

System.out.println(pw);
System.out.println(anon);
编辑:如果密码中有p/w/:则不起作用。。。我将设法解决

编辑#2:结果比我想象的要难,必须采用另一种方法:

pw:(abc)
pw:*****
因此,首先找到由“({something})”组成的字符串。然后创建一个由该字符串中的星星数组成的字符串。然后用输入中的星号替换字符串


注意:如果密码或后面的文本中包含parantises,则此选项不起作用,但我再次怀疑您是否会找到这样的正则表达式..

看起来棒极了!但是如果
String pw=“pw:(abc)bla..bla..”
,我只想替换括号中的内容looks真棒!但是如果
String pw=“pw:(abc)bla..bla..”
,我只想替换括号中的内容
    final String input = "pw:(abc) something!";

    Matcher matcher = Pattern.compile("\\(.*\\)").matcher(input);

    if (matcher.find()) {
        final String onlyPw = matcher.group();
        final String stars = StringUtils.repeat("*", onlyPw.length());

        System.out.println(input.replace(onlyPw, stars));
    }