Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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,在Java中,我想编写一个正则表达式来执行以下操作: 源字符串:abcdefg 输出字符串:ab***fg 源字符串:123456789 输出字符串:12****89 源字符串:a123d 输出字符串:a1*3d\A.{2}(+).{2}\z将返回您想要的内容。如果少于5个字符,则不起作用。这取决于语言。我的正则表达式是ruby的。在ruby中: \A=>字符串的开头 \z=>字符串末尾 找到您的语言对应项。(?)? (?<!^.?).(?!.?$) 这个想法是: (?-一个负回溯

在Java中,我想编写一个正则表达式来执行以下操作:
源字符串:
abcdefg

输出字符串:
ab***fg


源字符串:
123456789

输出字符串:
12****89


源字符串:
a123d

输出字符串:
a1*3d

\A.{2}(+).{2}\z将返回您想要的内容。如果少于5个字符,则不起作用。这取决于语言。我的正则表达式是ruby的。在ruby中:

\A=>字符串的开头 \z=>字符串末尾

找到您的语言对应项。

(?)?
(?<!^.?).(?!.?$)
这个想法是:

  • (?-一个负回溯,以确保
  • ^.?
    -字符串的开头不是零或一个字符
  • -要替换的字符
  • (?!)
    -为确保
  • ?$
    -字符串结尾不是零或一个字符

替换为single
*

以下代码使用regex
(.{2})(.*)(.{2})
来完全执行您要求的操作(使用上面
5
字符中的字符串):

如果您需要允许少于
5
字符(直到
3
以下字符没有意义),请使用:


什么是<代码> z < /代码>标志?RoEX的什么味道?OP没有定义他的语言,但是代码> > Z < /C>是一个元字符,不是一个标志;它与字符串的结尾匹配,所以它只在多行字符串的最后一行的结尾匹配。中间的<代码> *>代码>需要反映替换长度吗?path cause Lookback不接受pcre上的变量大小(regex101上的默认值)。java regex的一个点engine@GiuseppeRicupero,是的,在java中,可以使用长度可变的lookbehind,只要它们受有限长度的限制。:)
import java.util.regex.Matcher;
import java.util.regex.Pattern;

String input = "1234567890";

final Pattern hidePattern = Pattern.compile("(.{1,2})(.*)(.{1,2})");
Matcher m = hidePattern.matcher(input);
String output;

if(m.find()) {
  l = m.group(2).length();
  output = m.group(1) + new String(new char[l]).replace("\0", "*") + m.group(3);
}

System.out.println(output); // 12******90
(.{1,2})(.+)(.{1,2})