正则表达式在Java中屏蔽除前两个和后两个字符以外的字符
在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=>字符串末尾 找到您的语言对应项。(?)? (?<!^.?).(?!.?$) 这个想法是: (?-一个负回溯
源字符串:
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})