我有4个不同的正则表达式模式匹配器和相应的替换字符串。在我的java代码中,我检查每个regex并用值替换。无论如何,我可以合并成单个正则表达式和单个替换字符串吗?
DISC_CARD=(\\W|000)(6(?:011|5[0-9]{2})[0-9]{8})([0-9]{4}\\D)
MAST_CARD=(\\W|000)((?:5[0-9]{3}|2[2-7][0-9]{2})[0-9]{8})([0-9]{4}\\D)
VISA_CARD=(\\W|000)(4[0-9]{11})([0-9]{4}\\D)
AMEX_CARD=(\\W|000)(3[47][0-9]{9})([0-9]{4}\\D)
DISC_MASK=$1XXXXXXXXXXXX$3
MAST_MASK=$1XXXXXXXXXXXX$3
VISA_MASK=$1XXXXXXXXXXXX$3
AMEX_MASK=$1XXXXXXXXXXX$3Java代码:
for (int i = 0; i < regPatterns.size(); i++) {
message = regPatterns.get(i).matcher(message).replaceAll(maskPatterns[i]);
}发布于 2020-06-29 18:45:34
您可以使用结合所有给定的正则表达式。类似于:
^(\W|000)((?<Disc>6(?:011|5[0-9]{2})[0-9]{8})|(?<Mast>(?:5[0-9]{3}|2[2-7][0-9]{2})[0-9]{8})|(?<Visa>4[0-9]{11})|(?<Amex>3[47][0-9]{9}))([0-9]{4}\D)$打破了上述正则表达式:
^, $ --代表行的开始和结束--代表您的第一个捕获group.(?<Disc>(6(?:011|5[0-9]{2})[0-9]{8}) --代表您的DISC_Card验证regex.| --代表alternation.(?<Mast>(?:5[0-9]{3}|2[2-7][0-9]{2})[0-9]{8}) --代表您的MAST_CARD验证正则表达式group.(?<Visa>4[0-9]{11}) --代表您的VISA_CARD验证正则表达式组。<代码>H 137(?<Amex>3[47][0-9]{9})) -代表您的AMEX_CARD验证regex group.
([0-9]{4}\D) -代表您的第三个捕获组。(但根据新的regex,是7捕获group.)您可以在中找到上述正则表达式的演示。
java中的示例实现:(请根据您的需求实现代码)
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main{
// Regex pattern
private static final Pattern pattern = Pattern.compile("^(\\W|000)((?<Disc>6(?:011|5[0-9]{2})[0-9]{8})|(?<Mast>(?:5[0-9]{3}|2[2-7][0-9]{2})[0-9]{8})|(?<Visa>4[0-9]{11})|(?<Amex>3[47][0-9]{9}))([0-9]{4}\\D)$", Pattern.MULTILINE);
// final array of strings to replace(First element for all the three and second element for the last one i.e. Amex Card)
private static final String[] replacementStrings = {"$1xxxxxxxxxxxx$7", "$1xxxxxxxxxxx$7"};
public static void main(String[] args){
// Input String
String str = "0006011123456781114D\n000341234567891234D\n0002421123456787891D\n0004123456789012346R\nTHisWOntMAtch";
for(String st : str.split("\n")){
System.out.println(getMaskedCardDetail(st));
}
}
// Utility Method for provide Masking of card details.
private static String getMaskedCardDetail(String givenString){
Matcher matcher = pattern.matcher(givenString);
if(matcher.matches()){
String temp = "";
if(matcher.group("Disc") != null || matcher.group("Mast") != null || matcher.group("Visa") != null)
temp = matcher.replaceAll(replacementStrings[0]);
else
temp = matcher.replaceAll(replacementStrings[1]);
return temp;
}else{
return "NO MATCH";
}
}
}
/*
Output:
000xxxxxxxxxxxx1114D
000xxxxxxxxxxx1234D
000xxxxxxxxxxxx7891D
000xxxxxxxxxxxx2346R
NO MATCH
*/您可以在中找到上述实现的示例运行结果。
https://stackoverflow.com/questions/62644351
复制相似问题